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

R. David Murray rdmurray at bitdance.com
Fri Apr 12 22:52:16 CEST 2013


On Fri, 12 Apr 2013 15:33:02 -0400, Barry Warsaw <barry at python.org> wrote:
> On Apr 12, 2013, at 11:21 AM, Russell E. Owen wrote:
> 
> >I, too, would strongly prefer to see ordering within an enum. I use 
> >home-made enums heavily in my code and find ordering comparisons useful 
> >there.
> 
> This was all hashed out in gory detail on python-ideas.  I feel strongly that
> base EnumValues should be unordered, especially because the underlying values
> can be of any type.  What would you expect to happen in this case:
> 
>     class X(Enum):
>         a = 1
>         b = 'hi'
> 
>     if X.a < myvalue < X.b:
>         # whaa?
> 
> I think for most use cases, IntEnums will fit the bill for those who want
> ordered comparisons, and it's also easy to subclass EnumValues to specialize
> the behavior (in fact, this is how IntEnums are implemented).
> 
> So if you really want ordered-comparisons-with-untyped-enum-values, you can
> have them. :)

You are right, the problem of comparison of disparate types makes ordering
a non-starter.  But by the same token that means you are going to have to
be consistent and give up on having a sorted iteration and a stable repr:

>>> import enum
>>> class Foo(enum.Enum):
...    aa = 1
...    bb = 2
...    cc = 'hi'
>>> Foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "./enum.py", line 103, in __repr__
    for k in sorted(cls._enums)))
TypeError: unorderable types: str() < int()

--David


More information about the Python-Dev mailing list