我想在 Python 中创建一个管理所有静态成员的类。这些成员应该在类的定义期间已经被初始化。由于稍后需要重新初始化静态成员,我会将这段代码放入一个类方法中。
我的问题:如何从类内部调用这个类方法?
class Test():
# static member
x = None
# HERE I WOULD LOVE TO CALL SOMEHOW static_init!
# initialize static member in classmethod, so that it can be
#reinitialized later on again
@classmethod
def static_init(cls):
cls.x = 10
感谢任何帮助!
提前致谢, 沃尔克
最佳答案
在您的示例中执行 x=10
时,不仅类不存在,而且类方法也不存在。
Python 中的执行从上到下。如果 x=10
在 classmethod 之上,则此时您无法访问 classmethod,因为它尚未定义。
即使你可以运行类方法,也没关系,因为类还不存在,所以类方法不能引用它。直到整个类 block 运行之后才会创建类,所以当你在类 block 中时,没有类。
如果您想排除一些类初始化,以便稍后按照您描述的方式重新运行它,请使用类装饰器。类装饰器在类创建之后运行,所以它可以很好地调用类方法。
>>> def deco(cls):
... cls.initStuff()
... return cls
>>> @deco
... class Foo(object):
... x = 10
...
... @classmethod
... def initStuff(cls):
... cls.x = 88
>>> Foo.x
88
>>> Foo.x = 10
>>> Foo.x
10
>>> Foo.initStuff() # reinitialize
>>> Foo.x
88
关于python - 如何从 Python 中的类内部访问类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13900515/