问题 在Python中使用自定义值动态创建枚举?


我想通过读取YAML文件中的值在运行时创建枚举类型。所以我有这个:

# Fetch the values
v = {'foo':42, 'bar':24}

# Create the enum
e = type('Enum', (), v)

有没有正确的方法呢?我觉得自己在呼唤 type 不是一个非常简洁的解决方案。


5727
2017-11-13 10:00


起源

我不太清楚为什么你的 Enum 有 e.foo 和 e.bar 分配了这种奇怪值的属性。不是 Enum 一点都没! - Nhor
@Nhor是什么呢?我正在写一个C库的包装器,里面有一些枚举 typedef enum {soda = 3423, flower = 5827, water = 999} articles_t; (这显然是一个例子) - nowox
好的抱歉我的坏 - Nhor


答案:


您可以使用创建新的枚举类型 Enum 功能API

In [1]: import enum

In [2]: DynamicEnum = enum.Enum('DynamicEnum', {'foo':42, 'bar':24})

In [3]: type(DynamicEnum)
Out[3]: enum.EnumMeta

In [4]: DynamicEnum.foo
Out[4]: <DynamicEnum.foo: 42>

In [5]: DynamicEnum.bar
Out[5]: <DynamicEnum.bar: 24>

In [6]: list(DynamicEnum)
Out[6]: [<DynamicEnum.foo: 42>, <DynamicEnum.bar: 24>]

14
2017-11-13 10:08



我希望我们能做点什么 class MyEnum(IntEnum): _list = ["A", "B", "C"] - PascalVKooten
@PascalvKooten如何创建dict一样 {name: index for index, name in enumerate(the_list)}。它不适用于动态(没有调查过)但是对于静态它会自动编号。 repl.it/@altendky/SevereGiftedDuckbillcat - altendky