[ANN] aenum 1.3.0 released
Ethan Furman
ethan at stoneleaf.us
Sun Mar 13 04:20:41 EDT 2016
I am thrilled to announce the release of
aenum 1.3.0
aenum --- advanced enumerations, named tuples, and named constants
==================================================================
aenum includes the new Python stdlib enum module available in Python 3.4
backported for previous versions of Python from 2.7 and 3.3+
tested on 2.7, and 3.3+
An ``Enum`` is a set of symbolic names (members) bound to unique,
constant values. Within an enumeration, the members can be compared by
identity, and the enumeration itself can be iterated over.
A ``NamedTuple`` is a class-based, fixed-length tuple with a name for
each possible position accessible using attribute-access notation.
A ``Constant`` is a class of named values whose members cannot be
rebound; it lacks all other ``Enum`` capabilities, however;
consequently, it can have duplicate values. There is also a ``module``
function that can insert the ``Constant`` class into ``sys.modules``
where it will appear to be a module whose top-level names cannot be rebound.
Module Contents
---------------
``NamedTuple``
~~~~~~~~~~~~
Base class for ``creating NamedTuples``, either by subclassing or
via it's functional API.
``Constant``
~~~~~~~~~~
Constant class for creating groups of constants. These names cannot
be rebound to other values.
``Enum``
~~~~~~
Base class for creating enumerated constants.
``IntEnum``
~~~~~~~~~
Base class for creating enumerated constants that are also
subclasses of ``int``.
``AutoNumberEnum``
~~~~~~~~~~~~~~~~
Derived class that automatically assigns an ``int`` value to each
member.
``OrderedEnum``
~~~~~~~~~~~~~
Derived class that adds ``<``, ``<=``, ``>=``, and ``>`` methods to
an ``Enum``.
``UniqueEnum``
~~~~~~~~~~~~
Derived class that ensures only one name is bound to any one value.
``unique``
~~~~~~~~
Enum class decorator that ensures only one name is bound to any one
value.
``constant``
~~~~~~~~~~
Descriptor to add constant values to an ``Enum``
``convert``
~~~~~~~~
Helper to transform target global variables into an ``Enum``.
``enum``
~~~~~~
Helper for specifying keyword arguments when creating ``Enum``
members.
``export``
~~~~~~~~
Helper for inserting ``Enum`` members into a namespace (usually
``globals()``.
``extend_enum``
~~~~~~~~~~~~~
Helper for adding new ``Enum`` members after creation.
``module``
~~~~~~~~
Function to take a ``Constant`` or ``Enum`` class and insert it into
``sys.modules`` with the affect of a module whose top-level constant
and member names cannot be rebound.
``skip``
~~~~~~
Descriptor to add a normal (non-``Enum`` member) attribute to an
``Enum`` or ``Constant``.
Creating an Enum
----------------
Enumerations can be created using the ``class`` syntax, which makes them
easy to read and write. To define an enumeration, subclass ``Enum`` as
follows::
>>> from aenum import Enum
>>> class Color(Enum):
... red = 1
... green = 2
... blue = 3
The ``Enum`` class is also callable, providing the following functional
API::
>>> Animal = Enum('Animal', 'ant bee cat dog')
>>> Animal
<enum 'Animal'>
>>> Animal.ant
<Animal.ant: 1>
>>> Animal.ant.value
1
>>> list(Animal)
[<Animal.ant: 1>, <Animal.bee: 2>, <Animal.cat: 3>, <Animal.dog: 4>]
Creating NamedTuples
--------------------
Simple
^^^^^^
The most common way to create a new NamedTuple will be via the
functional API::
>>> from aenum import NamedTuple
>>> Book = NamedTuple('Book', 'title author genre', module=__name__)
Advanced
^^^^^^^^
The simple method of creating ``NamedTuples`` requires always specifying
all possible arguments when creating instances; failure to do so will
raise exceptions.
However, it is possible to specify both docstrings and default values
when creating a ``NamedTuple`` using the class method::
>>> class Point(NamedTuple):
... x = 0, 'horizontal coordinate', 0
... y = 1, 'vertical coordinate', 0
...
>>> Point()
Point(x=0, y=0)
Creating Constants
------------------
``Constant`` is similar to ``Enum``, but do not support the ``Enum``
protocols, and have no restrictions on duplications::
>>> class K(Constant):
... PI = 3.141596
... TAU = 2 * PI
...
>>> K.TAU
6.283192
-------------------------------------------------------------------
Some of the inspirations:
An Enum of Enums: http://stackoverflow.com/q/30471864/208880
C-like Enums: http://stackoverflow.com/q/29264941/208880
Extending Enums: http://stackoverflow.com/q/28126314/208880
Named constants: http://stackoverflow.com/q/31537316/208880
More information about the Python-announce-list
mailing list