2016-08-01 114 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'类。 –