[Python-Dev] PEP 435 -- Adding an Enum type to the Python standard library (original) (raw)

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 "", line 1, in 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