2016-09-07 49 views
0

从CPP/C#的到来,一个人如何指的是同一类的类主体在Python:静态类属性指向同一个类的特例在Python

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

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

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

回答

1

名称Foo在执行完整的类体之前未设置。你可以做你想做什么的唯一方法是将属性添加到后class声明已经完成了类

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

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

这听起来像你正在重新发明了Python的enum module;它可以让你定义一个是真的类的实例常量类:即class语句运行

from enum import Enum 

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

后,Foo.ANSWERFoo.value属性设置为42一个实例。