Piotr Duda wrote:
There is at least one more problem, enum inheritance, given:
class Colors(Enum):
red = 1
green = 2
blue = 3
class MoreColors(Color):
cyan = 4
magenta = 5
yellow = 6
what type is MoreColors.red?
Given the implementation we're considering, it would
probably be Colors.
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.
Moreover, suppose we have another type:
class YetMoreColors(Colors):
orange = 4
purple = 5
pink = 6
Now suppose a function expecting Colors gets an enum
with the integer value 4. How should it be interpreted?
Is it cyan or orange? What about if you write it to a
database column and read it back?
These considerations suggest to me that subclassing
enums should be disallowed, or at least not officially
supported.
--
Greg
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com