查看对象上调用的方法

时间:2014-05-12 17:08:58

标签: python

说我有以下内容:

obj = Object()
obj.meth(1, 2)

Object内,如何检测调用它的方法及其参数?我在想一个神奇的方法,但我不知道如何获得被调用的方法名称及其参数。我正在寻找类似的东西:

class Object(object):
    def ????(self):
        print 'Method %s was called with args: %s' % (????, ','.join(???))

基本上,我需要以下场景:obj是另一个类的某种代理,对“另一个类”的所有方法调用都应该通过obj。因此,不是直接调用another_class.meth(),而是调用obj.meth()。由于Object是抽象的,它将作为不同类的代理,因此无法知道将在其上调用哪些方法。

如果还有其他更好的解决方法,请分享!

1 个答案:

答案 0 :(得分:6)

您误解了方法访问的工作方式。可以在不调用方法的情况下查找方法:

method = someobj.methodname

if some_condition:
     method()

此处仅在满足条件之前引用该方法,而不是调用该方法。方法是只是另一个对象,恰好可以调用。

对于代理类,您不必捕获方法调用,而是捕获属性访问

class Object(object):
    def __init__(self, real_obj):
        self.real_obj = real_obj

    def __getattr__(self, name):
        return getattr(self.real_obj, name)