aenum - Advanced Enumerations
aenum is a Python library providing advanced enumerations that are compatible with Python's standard library Enum, along with metaclass-based NamedTuple and NamedConstant implementations. It offers extended features over the built-in `enum` module, such as support for unique values, multiple values, auto-numbering, and control over aliasing. The current version is 3.1.17 and it maintains an active release cadence.
Warnings
- breaking Version 3.1 introduced breaking changes, including the removal of `AutoNumber` and `AutoValue`. Custom Enum settings relying on these features will need to be updated.
- gotcha When migrating from Python 2 to Python 3, code using `aenum` (or `enum34`) might require special handling for `__order__` in Python 2 to preserve member order, a detail that differs in Python 3.
- gotcha By default, Enum members evaluate to `True` in a boolean context, even if their assigned value is `0`. This differs from standard Python integers where `0` is `False`. If this behavior is undesired, the `__bool__` (Python 3) or `__nonzero__` (Python 2) method must be overridden within the Enum.
- gotcha Python 3.11 introduced changes to `enum` mixin class behavior, particularly affecting how `__init__` and `__new__` interact with mixed-in data types, which could lead to unexpected value types for enum members. While some of these changes were later reverted, they represent a potential area of inconsistency when mixing types in Enums with `aenum` on newer Python versions.
Install
-
pip install aenum
Imports
- Enum
from aenum import Enum
- IntEnum
from aenum import IntEnum
- Flag
from aenum import Flag
- NamedTuple
from aenum import NamedTuple
- NamedConstant
from aenum import NamedConstant
- Enum
from aenum import Enum
Quickstart
from aenum import Enum, auto
class Color(Enum):
RED = auto()
GREEN = auto()
BLUE = auto()
print(Color.RED) # Output: <Color.RED: 1>
print(Color.GREEN.value) # Output: 2
class MyNamedTuple(NamedTuple):
field_a: int
field_b: str
item = MyNamedTuple(1, 'hello')
print(item.field_a) # Output: 1