是否可以创建一个没有参数的装饰器函数,该函数可以访问类变量。我发现了类似的问题,但它们总是引用实例变量,而不是类变量,并且通常仅在调用装饰方法时才访问变量。
我想在类定义时而不是实例化之后引用类变量。
想到了其他解决方案,例如创建Meta类,但我只想使用一个类和一个没有参数的装饰器。
我能够以以下方式实现所需的功能而无需使用装饰器,从而获得预期的结果。
class B:
b=3
resetFuns=[]
def __init__(self,x):
self.x=x
self.y=x+self.b
def foo(self):
self.y=self.x+self.b
resetFuns.append(foo)
def reset(self):
for f in self.resetFuns:
f(self)
test=B(4)
print(test.y)
B.b=9
print(test.y)
test.reset()
print(test.y)
7
7
13
但是我想使用与此类似的装饰器。
class A:
b=3
resetFuns=[] ##class variable I want to access
def __init__(self,x):
self.x=x
self.y=x+self.b
def resetDecorator(func):
resetFuns.append(func) ##can't reference resetFuns like this
return func
@resetDecorator
def foo(self):
self.y=self.x+self.b
def reset(self):
for f in resetFuns:
f(self)
答案 0 :(得分:2)
类似的东西:
def resetDecoratorCreator(resetFuns):
def resetDecorator(func):
resetFuns.append(func)
return func
return resetDecorator
class B:
b=3
resetFuns=[]
resetDecorator = resetDecoratorCreator(resetFuns)
def __init__(self,x):
self.x=x
self.y=x+self.b
@resetDecorator
def foo(self):
self.y=self.x+self.b
def reset(self):
for f in self.resetFuns:
f(self)
将为您提供所需的东西。