Динамически создавать перечисление с пользовательскими значениями в Python?

Я хотел бы создать тип перечисления во время выполнения, прочитав значения в файле YAML. Поэтому у меня есть это:

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

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

Есть ли правильный способ сделать это? Я чувствую, что вызов type - не очень аккуратное решение.

Ответ 1

Вы можете создать новый тип enum с помощью функционального API Enum:

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>]