具有重复值的python Enum的替代方案

use*_*776 4 python enums

我非常喜欢 Enum 并且我想做以下事情:

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

for color in Color:
    print(color.name)
    print(color.value)
Run Code Online (Sandbox Code Playgroud)

如您所见,Color 类中有重复的值。在这种情况下,我可以使用什么类替代方案来支持可迭代、名称、值?

Eth*_*man 5

您是在问如何拥有Color.red Color.blueblue成为 的别名red吗?

如果是,您将想要使用1库,它看起来像: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 red blue'
    _settings_ = NoAlias
    green = 0
    red = 1
    blue = 1
Run Code Online (Sandbox Code Playgroud)

并在使用中:

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

# green
# 0
# red
# 1
# blue
# 1
Run Code Online (Sandbox Code Playgroud)

使用的缺点NoAlias是禁用了按值查找(您不能这样做Color(1))。


1披露:我是Python stdlibEnumenum34backportAdvanced Enumeration ( aenum) 库的作者。