[Python-Dev] Enum: subclassing?

Antoine Pitrou solipsis at pitrou.net
Wed May 1 22:33:44 CEST 2013


On Wed, 1 May 2013 13:05:53 -0700
Eli Bendersky <eliben at gmail.com> wrote:
> On Wed, May 1, 2013 at 11:59 AM, Georg Brandl <g.brandl at gmx.net> wrote:
> 
> > Am 01.05.2013 20:44, schrieb Antoine Pitrou:
> > > On Wed, 01 May 2013 10:21:30 -0700
> > > Ethan Furman <ethan at stoneleaf.us> wrote:
> > >> We may not want to /completely/ disallow subclassing.  Consider:
> > >>
> > >> --> class StrEnum(str, Enum):
> > >> ...    '''string enums for Business Basic variable names'''
> > >> ...
> > >> --> class Vendors(StrEnum):
> > >> EnumError: subclassing not allowed
> > >
> > > I don't see the point of disallowing subclassing. It sounds like
> > > a pointless restriction.
> > >
> > > However, perhaps the constructor should forbid the returning of a base
> > > type, e.g.:
> > >
> > > class Season(Enum):
> > >     spring = 1
> > >
> > > class MySeason(Season):
> > >     """I look nicer than Season"""
> > >
> > > MySeason('spring')
> > > ...
> > > ValueError: Season.spring is not a MySeason instance
> > >
> > > (what this means is perhaps the subclassing of non-empty enum classes
> > > should be forbidden)
> >
> > That's exactly what's implemented in the ref435 code at the moment.
> >
> >
> It can't be because __call__ is by-value lookup, not by-name lookup.

Ok, I've mixed up the example. But, still, since Season(1) should
return the Season.spring singleton, I don't see any reasonable thing
for MySeason(1) to return. Hence the request to raise an exception.

Regards

Antoine.




More information about the Python-Dev mailing list