以下关于成员函数的装饰器的最小示例:
def wrap_function(func):
def wrapper(*args,**kwargs):
print(args)
print(kwargs)
return wrapper
class Foo:
@wrap_function
def mem_fun(self,msg):
pass
foo = Foo()
foo.mem_fun('hi')
输出:
(
所以自我就是其中的一个.
但是在使用包装类时:
class WrappedFunction:
def __init__(self,func):
self._func = func
def __call__(self,*args,**kwargs):
print(args)
print(kwargs)
def wrap_function(func):
return WrappedFunction(func)
class Foo:
@wrap_function
def mem_fun(self,msg):
pass
foo = Foo()
foo.mem_fun('hi')
输出是:
('hi',)
{}
因此,引用Foo对象的self不能在WrappedFunction对象的__call__体中访问.
我怎样才能在那里访问它?