Cara menggunakan python enum with attributes

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

Minimal usage:

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')

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 2

Or, skip primary IDs altogether for a pure enumeration:

from data_enum import DataEnum

class Currency(DataEnum):
    data_attributes = ('symbol', 'name')

Currency.CAD = Currency(symbol='$', name='Canadian dollar')
Currency.USD = Currency(symbol='$', name='United States dollar')
Currency.EUR = Currency(symbol='€', name='Euro')

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 True

Enforce 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')
0

Look up with members with defaults:

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')
1

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')
2

Sort 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')
3

Lint (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')
4

Test:

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