this answer由亞歷克·托馬斯之後,我使用以下內容來創建枚舉:如何使這個枚舉類型支持迭代?
def enum(*sequential):
enums = dict(zip(sequential, range(len(sequential))))
return type('Enum',(), enums)
我希望能夠獲得這些枚舉之一的長度。例如,我可以編寫
>>> Suit = enum('spades', 'hearts', 'diamonds', 'clubs')
>>> Suit.spades
0
>>> Suit.hearts
1
>>> Suit.diamonds
2
>>> Suit.clubs
3
但是沒有辦法在運行時列出所有的枚舉值。我希望能夠做到像
>>> [s for s in Suit]
[0, 1, 2, 3]
我已經試過enum()
函數內分配enum['__iter__']
,但我不知道我需要分配什麼樣的對象:
def enum(*sequential):
enums = dict(zip(sequential, range(len(sequential))))
enums['__iter__'] = iter(range(len(sequential)))
return type('Enum',(), enums)
給
>>> [s for s in Suit]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'type' object is not iterable
我怎麼能給出一個enum
列出其成員的能力嗎? (甚至只是來報告它的長度就足夠了,自那時以來,成員的range(len(Suit))
簡單的元素能力的枚舉。)
@JoelCornett你不能在'__iter__'補丁,看到我的回答。 – poke
@poke:>。<當然。然而,你可以實例化和迭代。就像'list(Suit())'一樣。假如你已經修補了'__iter__',那就是。 –