[Python-Dev] PEP 435 -- Adding an Enum type to the Python standard library (original) (raw)
Serhiy Storchaka storchaka at gmail.com
Fri Apr 26 22:59:01 CEST 2013
- Previous message: [Python-Dev] PEP 435 -- Adding an Enum type to the Python standard library
- Next message: [Python-Dev] PEP 435 -- Adding an Enum type to the Python standard library
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
- Previous message: [Python-Dev] PEP 435 -- Adding an Enum type to the Python standard library
- Next message: [Python-Dev] PEP 435 -- Adding an Enum type to the Python standard library
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]