[Python-Dev] PEP 435 -- Adding an Enum type to the Python standard library

Barry Warsaw barry at python.org
Thu Apr 25 23:39:45 CEST 2013


On Apr 25, 2013, at 02:25 PM, Eli Bendersky wrote:

>I think it's important to stress what this syntax is actually going to be
>used for. No one (I hope) is actually going to write Animals(1) or
>Animals[1]. They will write Animals.ant - this is what enums are for in the
>first place! The way I see it, this syntax is for enabling *programmatic
>access* - if you pull the value from a DB and want to convert it to an
>actual enum value, etc. So do we really need to have two syntaxes for this?

Excellent point, and no, we don't :).

>The call syntax already has other uses, and it's weird because:
>
>Enum(....) -> Creates new enums
>Animals(....) --> accesses values ?! This is contradictory
>
>Animals[...] to serve as a by-value lookup makes sense, though.

I think so too. :)

Note that I discovered that the same two-value call syntax on Enum can be used
on the derived classes.  It's exactly the same as using subclassing syntax to
extend an existing enum.  E.g.

    >>> class A(Enum):
    ...   a = 1
    ...   b = 2
    ...   c = 3
    ... 
    >>> class B(A):
    ...   d = 4
    ...   e = 5
    ... 
    >>> B.a is A.a
    True
    >>> X = Enum('X', 'a b c')
    >>> Y = X('Y', (('d', 4), ('e', 5)))
    >>> Y.a is X.a
    True

That's a nice symmetry.

-Barry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-dev/attachments/20130425/16592f65/attachment.pgp>


More information about the Python-Dev mailing list