[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