可以写一些像:
class Test(object):
def _decorator(self, foo):
foo()
@self._decorator
def bar(self):
pass
Run Code Online (Sandbox Code Playgroud)
这失败了:@self中的自我是未知的
我也尝试过:
@Test._decorator(self)
Run Code Online (Sandbox Code Playgroud)
也失败了:测试未知
我想暂时更改装饰器中的一些实例变量,然后在更改它们之前运行装饰方法.
我刷新了我尚未得到的一些python功能的记忆,我正在从此python教程中学习,并且有一个我不完全了解的示例。这是关于装饰器计算对函数的调用的代码,这是代码:
def call_counter(func):
def helper(x):
helper.calls += 1
return func(x)
helper.calls = 0
return helper
@call_counter
def succ(x):
return x + 1
if __name__ == '__main__':
print(succ.calls)
for i in range(10):
print(succ(i))
print(succ.calls)
Run Code Online (Sandbox Code Playgroud)
我在这里没有得到的是为什么我们增加函数包装器的调用(helper.calls + = 1)而不是函数调用本身,为什么它真正起作用?