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

Antoine Pitrou solipsis at pitrou.net
Tue Apr 23 16:33:02 CEST 2013


Le Tue, 23 Apr 2013 10:24:18 -0400,
"R. David Murray" <rdmurray at bitdance.com> a écrit :
> > 
> > I'm having a problem with the proposed implementation. I haven't
> > found any mention of it, so apologies if this has already been
> > discussed:
> > 
> > >>> from flufl.enum import *
> > >>> class C(Enum):
> > ...  a = 1
> > ...  b = 2
> > ... 
> > >>> C.a.__class__
> > <class 'flufl.enum._enum.EnumValue'>
> > >>> isinstance(C.a, C)
> > False
> > >>> isinstance(C(1), C)
> > False
> > 
> > It would really be better if instances were actual instances of the
> > class, IMO.
> 
> The first False looks correct to me, I would not expect an enum value
> to be an instance of the class that holds it as an attribute.  The
> second certainly looks odd, but what does it even mean to have an
> instance of an Enum class?

Perhaps I should have added some context:

>>> class C(Enum):
...  a = 1
...  b = 2
... 
>>> C(1)
<EnumValue: C.a [value=1]>
>>> C[1]
<EnumValue: C.a [value=1]>


It is simply the same as a __getattr__ call.

That said, I don't see why it wouldn't make sense for an enum value to
be an instance of that class. It can be useful to write
`isinstance(value, MyEnumClass)`. Also, any debug facility which has a
preference for writing out class names would produce a better output
than the generic "EnumValue".

Regards

Antoine.




More information about the Python-Dev mailing list