An alternative to the built-in Python from data_enum import DataEnum class Currency(DataEnum): data_attributes = ('symbol', 'name') Currency('CAD', symbol='$', name='Canadian dollar') Currency('USD', symbol='$', name='United States dollar') Currency('EUR', symbol='€', name='Euro') 6 implementation. Tested in Python 3.6 and above.
Data enums allow you to:
- Associate data with enum members without using tuple-based initialization
- Use an intuitive initialization syntax to define members
- Define pure enums without using from data_enum import DataEnum class Currency(DataEnum): data_attributes = ('symbol', 'name') Currency('CAD', symbol='$', name='Canadian dollar') Currency('USD', symbol='$', name='United States dollar') Currency('EUR', symbol='€', name='Euro') 7
- Define value-based enums without storing them as class attributes
- Define secondary unique keys & use them to look up enum members
- Use classmethod syntax (from data_enum import DataEnum class Currency(DataEnum): data_attributes = ('symbol', 'name') Currency('CAD', symbol='$', name='Canadian dollar') Currency('USD', symbol='$', name='United States dollar') Currency('EUR', symbol='€', name='Euro') 8) to look up members, instead of using initializers
Usage
Install via PyPI:
pip install data-enumMinimal usage:
Access the members by value:
Currency.get('USD') Currency.get('CAD') Currency.get('EUR')Store the members as attributes:
class Currency(DataEnum): data_attributes = ('symbol', 'name') Currency.CAD = Currency('CAD', symbol='$', name='Canadian dollar') Currency.USD = Currency('USD', symbol='$', name='United States dollar') Currency.EUR = Currency('EUR', symbol='€', name='Euro')Use a custom attribute as the primary ID:
class Currency(DataEnum): primary_attribute = 'code' data_attributes = ('symbol', 'name') Currency('CAD', symbol='$', name='Canadian dollar') Currency('USD', symbol='$', name='United States dollar') Currency('EUR', symbol='€', name='Euro')Use integers as primary IDs:
class Door(DataEnum): data_attributes = ('description',) Door(1, description='Door #1') Door(2, description='Door #2') Door(3, description='Door #3') d2 = Door(2) # returns Door(2, description='Door #2') int(d2) # returns 2Or, skip primary IDs altogether for a pure enumeration:
Access the attached data:
print(Currency.USD.name) # prints 'United States dollar' print(Currency.EUR.symbol) # prints '€' print(Currency.USD) # prints 'USD'Compare directly:
Currency.USD == Currency.CAD # returns False Currency.EUR == Currency.EUR # returns TrueEnforce unique secondary attributes:
class Currency(DataEnum): # Use a tuple with the second value as True for unique keys data_attributes = (('symbol', True), 'name') # Throws ValueError Currency('CAD', symbol='$', name='Canadian dollar') Currency('USD', symbol='$', name='United States dollar')Look up members by unique secondary attributes:
from data_enum import DataEnum class Currency(DataEnum): data_attributes = ('symbol', 'name') Currency('CAD', symbol='$', name='Canadian dollar') Currency('USD', symbol='$', name='United States dollar') Currency('EUR', symbol='€', name='Euro') 0Look up with members with defaults:
Testing, etc.
Install requrements:
from data_enum import DataEnum class Currency(DataEnum): data_attributes = ('symbol', 'name') Currency('CAD', symbol='$', name='Canadian dollar') Currency('USD', symbol='$', name='United States dollar') Currency('EUR', symbol='€', name='Euro') 2Sort imports (Requires Python >= 3.6):
from data_enum import DataEnum class Currency(DataEnum): data_attributes = ('symbol', 'name') Currency('CAD', symbol='$', name='Canadian dollar') Currency('USD', symbol='$', name='United States dollar') Currency('EUR', symbol='€', name='Euro') 3Lint (Requires Python >= 3.6):
from data_enum import DataEnum class Currency(DataEnum): data_attributes = ('symbol', 'name') Currency('CAD', symbol='$', name='Canadian dollar') Currency('USD', symbol='$', name='United States dollar') Currency('EUR', symbol='€', name='Euro') 4Test:
from data_enum import DataEnum class Currency(DataEnum): data_attributes = ('symbol', 'name') Currency('CAD', symbol='$', name='Canadian dollar') Currency('USD', symbol='$', name='United States dollar') Currency('EUR', symbol='€', name='Euro') 5