pythonenums

Dynamically create an enum with custom values in Python?


I would like to create an enum type at runtime by reading the values in a YAML file. So I have this:

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

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

Is there a proper way to do it? I feel calling type is not a very neat solution.


Solution

  • You can create new enum type using Enum functional 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>]