静态类属性,指向Python中同一个类的特殊实例

时间:2016-09-07 13:12:44

标签: python class

来自cpp / c#,如何在Python中引用类体中的同一个类:

class Foo(object):
    ANSWER = Foo(42)
    FAIL = Foo(-1)

    def __init__(self, value):
        self._v = value

当我尝试使用这段代码时,我在一行试图实例化ANSWER实例时得到“name'Foo'未定义”异常。

1 个答案:

答案 0 :(得分:1)

在执行完整的类主体之前,不会设置名称Foo。您可以执行所需操作的唯一方法是在 class语句完成后向类添加属性:

class Foo(object):    
    def __init__(self, value):
        self._v = value

Foo.ANSWER = Foo(42)
Foo.FAIL = Foo(-1)

听起来你正在重新发明Python enum module;它允许您定义一个具有常量的类,该类实际上是该类的实例:

 from enum import Enum

 class Foo(Enum):
     ANSWER = 42
     FAIL = -1

class语句运行后,Foo.ANSWERFoo的一个实例,.value属性设置为42