On Wed, 01 May 2013 10:21:30 -0700
Ethan Furman <[email protected]> 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)
Regards
Antoine.
>
>
> My point is that IntEnum, StrEnum, ListEnum, FloatEnum are all "subclasses"
> of Enum. To then have a subclass of
> that, such as Season(StrEnum), is subclassing a subclass.
>
> Now, if we do want to completely disallow it, we can ditch IntEnum and force
> the user to always specify the mixin
> type:
>
> --> class Season(str, Enum):
> .
> .
> .
>
> --> class Names(str, Enum):
> .
> .
> .
>
> But that's not very user friendly... although it's not too bad, either.
>
> One consequence of the way it is now (IntEnum, StrEnum, etc., are allowed) is
> that one can put methods and other
> non-Enum item in a base class and then inherit from that for actual
> implemented Enum classes.
>
> --> class StrEnum(str, Enum):
> ... def describe(self):
> ... print("Hi! I'm a %s widget!" % self.value)
> ...
>
> --> class Season(StrEnum):
> ... spring = 'green'
> ... summer = 'brown'
> ... autumn = 'red'
> ... winter = 'white'
> ...
>
> --> class Planet(StrEnum):
> ... mars = 'red'
> ... earth = 'blue'
> ...
>
> --> Season.summer.descripbe()
> Hi! I'm a brown widget!
>
> --> Planet.earth.describe()
> Hi! I'm a blue widget!
>
> --
> ~Ethan~
_______________________________________________
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com