python - 具有重复值的 python 枚举的替代方法

标签 python enums

我非常喜欢枚举,我想做以下事情:

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

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

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

最佳答案

你是在问如何在没有 blue 的情况下拥有 Color.red Color.blue 红色?

如果是,您需要使用 aenum 1 库,它看起来像这样:

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

并在使用中:

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

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

使用 NoAlias 的缺点是按值查找被禁用(您不能执行 Color(1))。


1 披露:我是 Python stdlib Enum 的作者, enum34 backport , 和 Advanced Enumeration (aenum)图书馆。

关于python - 具有重复值的 python 枚举的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690784/

相关文章:

enums - Kotlin 枚举中的循环引用

python - 为什么继承对此不起作用

python - 将dict对象添加到postgresql

python - 使基本密码函数更具可读性

python - ctypes:将指向 char 的指针分解/转换为指向 char 的指针数组

java - 带有内部枚举的策略模式

swift - Swift 中字符串支持枚举的性能

javascript - JavaScript 中的枚举

python - Pyral+新建任务+ValueError : No JSON object could be decoded

python - <django.db.models.fields.related.RelatedManager object at 0x7ff4e003d1d0> 不是 JSON 可序列化的