gpt4 book ai didi

python - 如何从 Python 中的类内部访问类方法

转载 作者:行者123 更新时间:2023-12-04 16:57:16 25 4
gpt4 key购买 nike

我想在 Python 中创建一个管理所有静态成员的类。这些成员应该在类的定义过程中已经被初始化。由于稍后需要重新初始化静态成员这一事实,我会将这段代码放入类方法中。

我的问题:如何从类(class)内部调用这个类方法?

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在您的示例中执行,不仅该类不存在,而且 classmethod 也不存在。

Python 中的执行是从上到下进行的。如 x=10位于 classmethod 之上,此时您无法访问 classmethod,因为它尚未定义。

即使您可以运行 classmethod,也没关系,因为该类尚不存在,因此 classmethod 无法引用它。直到整个类块运行后才会创建类,因此当您在类块中时,没有类。

如果您想分解一些类初始化以便稍后可以按照您描述的方式重新运行它,请使用类装饰器。类装饰器在类创建后运行,因此它可以很好地调用类方法。

>>> 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/47317588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com