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

标签 python class-members

我想在 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/

相关文章:

python - 如何将 '?' 转换为 NaN

Java 通过最终数组定义类成员

java - 直接初始化类成员与在方法中进行初始化有什么区别?

python - 'ArgumentParser' 对象没有属性 'parse_arg'

python - 在 Linux 上从 Python 更改文件系统到 "listen"的方法?

python - 多重联动 - Python

c++ - 在没有任何构造函数的类的情况下,C++11 中自动生成的类成员函数

python - 如何在Python中隐藏 "No Instance(s) available"?

c++ - 如何修改静态成员函数中的变量?

c++ - 在 C++ 中使用非默认构造函数初始化对象的成员类