Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在decorator函数中访问类变量_Python_Class_Oop_Python Decorators - Fatal编程技术网

Python 如何在decorator函数中访问类变量

Python 如何在decorator函数中访问类变量,python,class,oop,python-decorators,Python,Class,Oop,Python Decorators,是否可以创建一个不带参数的decorator函数来访问类变量。我发现了类似的问题,但它们总是指实例变量,而不是类变量,通常只有在调用修饰方法时才访问这些变量 我想在类定义中引用类变量,而不是在实例化之后 我想到了其他解决方案,比如创建一个元类,但我只想使用一个类和一个装饰器,没有任何争论 我能够实现所需的功能,而无需使用以下方式的装饰与预期的结果 B类: b=3 resetFuns=[] 定义初始化(self,x): self.x=x self.y=x+self.b def foo(self):

是否可以创建一个不带参数的decorator函数来访问类变量。我发现了类似的问题,但它们总是指实例变量,而不是类变量,通常只有在调用修饰方法时才访问这些变量

我想在类定义中引用类变量,而不是在实例化之后

我想到了其他解决方案,比如创建一个元类,但我只想使用一个类和一个装饰器,没有任何争论

我能够实现所需的功能,而无需使用以下方式的装饰与预期的结果

B类:
b=3
resetFuns=[]
定义初始化(self,x):
self.x=x
self.y=x+self.b
def foo(self):
self.y=self.x+self.b
resetFuns.append(foo)
def重置(自):
对于self.resetFuns中的f:
f(自我)
测试=B(4)
打印(test.y)
B.B=9
打印(test.y)
test.reset()
打印(test.y)
7.
7.
13
但我想用一个类似的装饰器

A类:
b=3
resetFuns=[]##我要访问的类变量
定义初始化(self,x):
self.x=x
self.y=x+self.b
def重置装饰器(func):
resetFuns.append(func)##不能像这样引用resetFuns
返回函数
@重置装饰器
def foo(self):
self.y=self.x+self.b
def重置(自):
对于重置函数中的f:
f(自我)
类似于:

def resetdecorreator(resetFuns):
def重置装饰器(func):
resetFuns.append(func)
返回函数
返回重置装饰器
B类:
b=3
resetFuns=[]
resetDecorator=resetDecoratorCreator(resetFuns)
定义初始化(self,x):
self.x=x
self.y=x+self.b
@重置装饰器
def foo(self):
self.y=self.x+self.b
def重置(自):
对于self.resetFuns中的f:
f(自我)
将为您提供所需的服务。

类似于:

def resetdecorreator(resetFuns):
def重置装饰器(func):
resetFuns.append(func)
返回函数
返回重置装饰器
B类:
b=3
resetFuns=[]
resetDecorator=resetDecoratorCreator(resetFuns)
定义初始化(self,x):
self.x=x
self.y=x+self.b
@重置装饰器
def foo(self):
self.y=self.x+self.b
def重置(自):
对于self.resetFuns中的f:
f(自我)
会帮你找到你想要的