2017-10-17 44 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