如何访问修饰方法的self
?
基于this answer,self引用装饰器:
class Decorator:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
print(self.func.__name__)
self.counter += 1
return self.func(*args, **kwargs)
class A:
def __init__(self):
self.counter = 0
@Decorator
def method1(self):
pass
上述示例将导致:
5 def __call__(self, *args, **kwargs):
----> 6 self.counter += 1
7 return self.func(*args, **kwargs)
AttributeError: 'Decorator' object has no attribute 'counter'
注:return self.func(*args, **kwargs)
也出错了。我还不完全明白如何将其传递给A.method1
。关键是我想更新计数器并打印self.func.__name__
,仅此而已。
1条答案
按热度按时间1tuwyuhd1#
这里是一个带有类似函数的装饰器的例子,它可以被推广而不适用于其他情况。
提示:当使用类装饰器时,为另一个类的self使用另一个标识符,
otherself
,...