2016-08-01 50 views
2

我喜歡枚舉了很多,我想做到以下幾點:替代的Python枚舉有重複值的

class Color(Enum): 
    green = 0 
    red = 1 
    blue = 1 

for color in Color: 
    print(color.name) 
    print(color.value) 

正如你所看到的,也有Color類重複的值。在這種情況下,我可以使用哪種類別替代方法來支持可迭代,名稱,值?

+0

看看:http://stackoverflow.com/a/1695250/5399734和在這個問題下的其他很好的答案。 –

回答

1

你是問你怎麼能有Color.redColor.blue沒有blue是爲red的別名?

如果是的話,你要使用aenum 庫,它看起來是這樣的:

from aenum import Enum, NoAlias 

# python 3 
class Color(Enum, settings=NoAlias): 
    green = 0 
    red = 1 
    blue = 1 

# python 2 
class Color(Enum): 
    _order_ = 'green rud blue' 
    _settings_ = NoAlias 
    green = 0 
    red = 1 
    blue = 1 

而且在使用中:

for color in Color: 
    print(color.name) 
    print(color.value) 

# green 
# 0 
# red 
# 1 
# blue 
# 1 

使用NoAlias的缺點是按值查找被禁用(你不能做Color(1))。


披露:我是Python stdlib Enum的作者,enum34 backportAdvanced Enumeration (aenum)庫。

+0

太棒了!我使用Enum內置的「枚舉」,但不知道存在從「aenum」以NoAlias設置的Enum。謝謝! – user1502776

+0

@ user1502776:如果你不需要其他的'Enum'好東西(遍歷類,類的長度等),那麼你可能想要使用'aenum'中的'NamedConstant'類。 –