2017-10-17 43 views
0

我确定这是重复的,但目前我无法追踪它。Python 3中的自定义枚举类型

在这个例子中,为什么self没有定义?

class State(Enum): 
    MY_STATE = type(self)('foo', 'bar') 

    def __init__(self, some, thing): 
     self.some = some 
     self.thing = thing 

更换type(self)State也返回NameErrorState

+1

'self'指实例。为什么它应该在_class body_中定义?它只在内部方法中可用,并且只有在您命名第一个参数'self'时才可用。 – MSeifert

+2

你想要的代码是什么? –

+0

@MenglongLi将参数添加到'Enum'成员 – MTCoster

回答

2

self是没有定义的,因为你是指它在类变量,而不是一个实例变量。这与在另一种语言的static方法中使用this类似。对于State也是如此,在您引用它的点上,该类尚未定义,并且该名称不存在。

+0

“在类变量中引用它”是什么意思?你能详细说明一下吗? – MSeifert

+0

这是否使得具有“State”类型的实例变量不可能? – MTCoster

+0

无论如何,这将进入无限递归,因为实例变量本身会创建一个实例变量,这将创建一个实例变量.... – MSeifert

1

为什么不提取另一类是这样的:

from enum import Enum 


class MyClass: 
    def __init__(self, some, thing): 
     self.some = some 
     self.thing = thing 


class State(Enum): 
    MY_STATE = MyClass('foo', 'bar') 


print(State.MY_STATE == State.MY_STATE) 
+0

这是否会被认为比试图将它整合到一个班级更pythonic? – MTCoster