Basic Examples
Create an Inheritable Enum and Subclass
from enum import Enum
from extendableenum import inheritable_enum
@inheritable_enum
class Base(Enum):
A = 1
B = 2
# Subclass Base, define new members and an aliases.
class Derived(Base):
ALIAS_B = 2
C = 3
D = 4
Create an Enum with the Null Member
from enum import Enum
from extendableenum import auto_null_member, set_auto_null
# optional: specify null member name and value
set_auto_null('NULL', None) # this is the default name/value
@auto_null_member
class Fruit(Enum):
APPLE = 1
BANANA = 2
PEAR = 3
print(f'{Fruit.NULL.name}, {Fruit.NULL.value}')
>>> NULL, None
Create a Custom Base Class for Auto Null Enums
from enum import Enum
from extendableenum import auto_null_member
@auto_null_member
class MyAutoNullEnum(Enum):
# No enum members defined, MyAutoNullEnum is inheritable.
def some_method(self):
print(f'My name is {self.name} and my value is {self.value}')
# Without the auto_null_member decorator
class Fruit(MyAutoNullEnum):
APPLE = 1
BANANA = 2
PEAR = 3
Fruit.APPLE.some_method()
Fruit.NULL.some_method()
>>> My name is APPLE and my value is 1
>>> My name is NULL and my value is None
Extend an Externally Defined Enum with Methods
from enum import Enum
from some_library import SomeEnum
from extendableenum import post_mixin_enum
@post_mixin_enum(SomeEnum)
class MyMixin(Enum):
def my_new_mixin(self):
print('This is my new mixin function')
# SomeEnum is now a subclass of MyMixin!
SomeEnum.MEMBER.my_new_mixin()
>>> This is my new mixin function
Copy an Existing Enum with Additional Members
from enum import Enum
from extendableenum import copy_enum_members
class AmpVolume(Enum):
MUTE = 0
QUIET = 1
NORMAL = 5
LOUD = 7
TOOLOUD = 10
@copy_enum_members(AmpVolume)
class BetterAmpVolume(Enum):
METAL = 10 # Alias for TOOLOUD
SPINALTAP = 11
print(repr(BetterAmpVolume.METAL))
>>> <BetterAmpVolume.TOOLOUD: 10>