如何将自定义数据字段添加到Python枚举?

时间:2016-11-29 21:40:33

标签: python python-3.x enums

继承自enum.Enum提供的标准Python枚举提供了枚举名称和值。这是一个简短的例子:

@unique
class MyEnum(Enum):
  foo = 2
  bar = 5

print(MyEnum.foo.name + " - " + MyEnum.foo.value)
> foo - 2

类成员名称被转换为member.name,指定的值转换为member.value。我想使用更多自定义数据字段,如下所示:

@unique
class MyEnum(Enum):
  foo = {'value':2, 'mydata1': "file2.txt"}
  bar = {'value':5, 'mydata1': "file5.txt"}

print(MyEnum.foo.name + " - " + MyEnum.foo.value + " - " + MyEnum.foo.mydata1)
> foo - 2 - file2.txt

字典的每个键值对都被转换为名为对子键的成员属性(name除外),并分配了该对的值。

通过从该类派生,可以在enum.EnumMeta之上实现此功能吗?我看到类EnumMetaEnum之间存在很多依赖关系:(。所以我假设我还需要一个新的Enum类,我可以从中派生自定义枚举,对吗?

编辑1:
从EnumMeta对新元类进行子类化会导致foo

的KeyErrors
class ExtendedEnumMeta(EnumMeta):
  # ...

所以我需要编写一个派生自type的新元类。

0 个答案:

没有答案