我喜歡枚舉了很多,我想做到以下幾點:替代的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和在這個問題下的其他很好的答案。 –