[Python-Dev] PEP 435 -- Adding an Enum type to the Python standard library

Serhiy Storchaka storchaka at gmail.com
Fri Apr 26 22:59:01 CEST 2013

26.04.13 11:00, Greg Ewing написав(ла):
> However, there's a worse problem with defining enum
> inheritance that way. The subtype relation for extensible
> enums works the opposite way to that of classes.
> To see this, imagine a function expecting something
> of type Colors. It knows what to do with red, green and
> blue, but not anything else. So you *can't* pass it
> something of type MoreColors, because not all values
> of type MoreColors are of type Colors.
> On the other hand, you *can* pass a value of type Colors
> to something expecting MoreColors, because every value of
> Colors is also in MoreColors.

I propose do not use an inheritance for extending enums, but use an import.

class Colors(Enum):
   red = 1
   green = 2
   blue = 3

class MoreColors(Enum):
   from Colors import *
   cyan = 4
   magenta = 5
   yellow = 6

An inheritance we can use to limit a type of values.

class Colors(int, Enum): # only int values
   red = 1
   green = 2
   blue = 3

Colors.viridity = green

More information about the Python-Dev mailing list