说我有以下内容:
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
是抽象的,它将作为不同类的代理,因此无法知道将在其上调用哪些方法。
如果还有其他更好的解决方法,请分享!
答案 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)