【发布时间】:2014-09-01 14:08:47
【问题描述】:
我想在调用特定方法之前在调用函数的包装方法。
所以我想我必须重写__getattribute__ 方法。
下面是代码示例:
def wrapper(func):
return func * 2
class A(object):
def test(self, arg):
return arg + 1
def __getattribute__(self, name):
if name in ['test']:
return wrapper(super(A, self).__getattribute__(name))
return super(A, self).__getattribute__(name)
问题是当test返回值时调用getattribute。我想要的是能够用参数捕获test 并像这样定义包装器方法:
def wrapper(func, *args, **kwargs):
print "do some stuff"
return func(*args, **kwargs)
【问题讨论】:
-
你的意思是把括号放在下面
return wrapper(super(A, self).__getattribute__)(name)吗? -
@DavidRobinson:不,这实际上并没有检索方法对象。看看我的答案,我将
super()调用和包装分开。
标签: python wrapper getattribute