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

Barry Warsaw barry at python.org
Fri Apr 12 16:30:05 CEST 2013


On Apr 12, 2013, at 09:03 AM, Michael Urman wrote:

>> You also may not duplicate values in derived enumerations::
>>
>>     >>> class BadColors(Colors):
>>     ...     yellow = 4
>>     ...     chartreuse = 2 # Oops!
>>     Traceback (most recent call last):
>>     ...
>>     ValueError: Conflicting enums with value '2': 'green' and 'chartreuse'
>>
>
>Is there a convenient way to change this behavior, namely to indicate that
>conflicts are acceptable in a given Enum? While I like the idea of catching
>mistaken collisions, I've seen far too many C/C++ scenarios where multiple
>names map to the same value. This does raise questions, as it's unclear
>whether each name should get its own representation, or whether it's better
>to let DupEnum.name1 is DupEnum.name2 be True.

Currently there is not.  This behavior is defined in the metaclass.

>(For the latter behavior, would adding DupEnum.name2 = DupEnum.name1 after
>the class declaration work today?)

Yes, but the repr/str of the alias will show the original value.

    >>> from flufl.enum import Enum
    >>> Colors = Enum('Colors', 'red green blue')
    >>> Colors.black = Colors.blue
    >>> Colors.black
    <EnumValue: Colors.blue [value=3]>
    >>> Colors.black is Colors.blue
    True

-Barry


More information about the Python-Dev mailing list