如何扩展 Python 枚举?

新手上路,请多包涵

在 Python 3.4 中扩展 Enum 类型的最佳实践是什么,甚至有可能这样做吗?

例如:

 from enum import Enum

class EventStatus(Enum):
   success = 0
   failure = 1

class BookingStatus(EventStatus):
   duplicate = 2
   unknown = 3

Traceback (most recent call last):
...
TypeError: Cannot extend enumerations

目前无法创建包含成员的基本枚举类并将其用于其他枚举类(如上例所示)。还有其他方法可以实现 Python 枚举的继承吗?

原文由 falek.marcin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

虽然不常见,但有时从多个模块创建一个枚举很有用。 aenum 1库通过 extend_enum 函数支持这一点:

 from aenum import Enum, extend_enum

class Index(Enum):
    DeviceType    = 0x1000
    ErrorRegister = 0x1001

for name, value in (
        ('ControlWord', 0x6040),
        ('StatusWord', 0x6041),
        ('OperationMode', 0x6060),
        ):
    extend_enum(Index, name, value)

assert len(Index) == 5
assert list(Index) == [Index.DeviceType, Index.ErrorRegister, Index.ControlWord, Index.StatusWord, Index.OperationMode]
assert Index.DeviceType.value == 0x1000
assert Index.StatusWord.value == 0x6041


1披露:我是 Python Enumenum34 backport高级枚举 ( aenum ) 库的作者。

原文由 Ethan Furman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题