[Python-Dev] Enum: subclassing?

Eli Bendersky eliben at gmail.com
Wed May 1 22:43:22 CEST 2013


On Wed, May 1, 2013 at 1:33 PM, Antoine Pitrou <solipsis at pitrou.net> wrote:

> 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.
>

What do you need MySeason for, though? IIUC, you don't ask to allow adding
enum values in it, so it only leaves adding extra functionality (methods)?
What are the use cases?

Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20130501/58478009/attachment.html>


More information about the Python-Dev mailing list