[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