我正在尝试按照另一个stackoverflow文章中的描述应用conditional decorator,但我希望从使用其的类内部设置条件。相反,我收到一个引用错误,指出未定义自我。
class foo:
def __init__(self):
self.debug = True
@conditional_decorator(decorator, self.debug)
def function(self):
pass
我尝试定义一个全局变量并从__ init __()方法内部对其进行更新,但在作为装饰器的参数调用时,它保留了其原始值。
debug = None
class foo:
def __init__(self):
self.debug = True
global debug
debug = self.debug
@conditional_decorator(decorator, debug)
def function(self):
pass
唯一有效的方法是声明一个全局变量并将其设置在类之外。
如何将class属性的值应用于装饰器?
这是使装饰器处理类和参数的方式:
from functools import wraps
def conditional_decorator(param):
def real_decorator(fn):
@wraps(fn)
def wrapper(*args, **kw):
cls = args[0]
print(cls.debug)
print(param)
return wrapper
return real_decorator
class foo:
def __init__(self):
self.debug = True
@conditional_decorator('param1')
def function(self):
pass
f = foo()
f.function()
输出:
True
param1