我喜欢枚举了很多,我想做到以下几点:替代的Python枚举有重复值的
class Color(Enum):
green = 0
red = 1
blue = 1
for color in Color:
print(color.name)
print(color.value)
正如你所看到的,也有Color类重复的值。在这种情况下,我可以使用哪种类别替代方法来支持可迭代,名称,值?
我喜欢枚举了很多,我想做到以下几点:替代的Python枚举有重复值的
class Color(Enum):
green = 0
red = 1
blue = 1
for color in Color:
print(color.name)
print(color.value)
正如你所看到的,也有Color类重复的值。在这种情况下,我可以使用哪种类别替代方法来支持可迭代,名称,值?
你是问你怎么能有Color.red
和Color.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
backport和Advanced Enumeration (aenum
)库。
太棒了!我使用Enum内置的“枚举”,但不知道存在从“aenum”以NoAlias设置的Enum。谢谢! – user1502776
@ user1502776:如果你不需要其他的'Enum'好东西(遍历类,类的长度等),那么你可能想要使用'aenum'中的'NamedConstant'类。 –
看看:http://stackoverflow.com/a/1695250/5399734和在这个问题下的其他很好的答案。 –