[Python-Dev] Enum: subclassing?

Georg Brandl g.brandl at gmx.net
Wed May 1 23:35:17 CEST 2013


Am 01.05.2013 22:05, schrieb Eli Bendersky:
> 
> 
> 
> On Wed, May 1, 2013 at 11:59 AM, Georg Brandl <g.brandl at gmx.net
> <mailto: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 <mailto: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. By-name
> lookup is Season.spring or getattr(Season, 'spring')

Right, I was just referring to the parenthetical remark.

Georg



More information about the Python-Dev mailing list