2017-08-02 98 views
1

我正在玩弄枚舉。尤其是,我把從enum文檔的這段代碼:`dir()`顯示具有重複屬性的枚舉元素(python3.4)

from enum import Enum 
class Color(Enum): 
    RED = 1 
    GREEN = 2 
    BLUE = 3 

然後,調用dir()Color.RED

In [2]: dir(Color.RED) 
Out[2]: ['__class__', '__doc__', '__module__', 'name', 'name', 'value', 'value'] 

正如你可以看到,有兩個相同的屬性 - namevalue有。

dir()文檔:

[...]隨着說法,試圖返回有效屬性的列表 該對象。

那麼,爲什麼dir寄存器Color.RED具有相同名稱相同的屬性和它們有什麼不同?

+0

什麼是Python版本? – user2357112

+0

@ user2357112對不起,忽略提及。它在3.4。另外,試用了IPython。 –

回答

2

dir(thing)基本上只是sorted(thing.__dir__())thing.__dir__可以返回幾乎任何東西。枚舉有一個定製的__dir__實現已經改變了幾次;在3.4,that __dir__ implementation中,一旦明確且一次從MRO搜索中意外地將'name''value'列入列表兩次。

+0

我會拿這個。這似乎是問題修復> = 3.5。想知道爲什麼沒人注意到這一點。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ:嗯,有人注意到了,否則我就不會修復它! ;-) –

+0

@EthanFurman啊!很高興見到你。而且,讓你感到羞恥,讓這個可怕的表演停止錯誤進入製作:p –