(original) (raw)
On Wed, Jan 30, 2013 at 7:35 AM, Barry Warsaw <barry@python.org> wrote:
On Jan 30, 2013, at 03:16 PM, Michael Foord wrote:Sure, it does because you have to be explicit about the enum int value to
\>Being an int subclass (and possibly optionally a strs subclass) is a
\>requirement if any adopted Enum is to be used \*within\* the standard library
\>in places where integers are currently used as "poor man's enums". I also
\>don't \*think\* flufl.enum supports flag enums (ones that can be OR'd
\>together), right?
assign the item. �This doesn't bother me because the syntax is clear, I almost
always want an explicit int value anyway, inheritance is supported, and as you
comment, flag values are (mostly) easy to support.
class Colors(Enum):
� � red = 1
� � green = 2
� � blue = 3
class MoreColors(Colors):
� � cyan = 4
� � magenta = 5
� � # chartreuse = 2 would be an error
class Flags(Enum):
� � beautiful = 1
� � fast = 2
� � elegant = 4
� � wonderful = 8
Now, it's true that because Flags.fast is not an int, it must be explicitly
converted to an int, e.g. \`int(Flags.fast)\`. �That doesn't bother me.
What does bother me is that Enum doesn't support automatic conversion to int
for OR and AND, so you have to do this:
\>>> int(Flags.fast) | int(Flags.elegant)
6
That should be easy enough to fix by adding the appropriate operators so that
you could do:
\>>> Flags.fast | Flags.elegant
6
Returning an int from such operations is the only sensible interpretation.
https://bugs.launchpad.net/flufl.enum/+bug/1110501
As far as autonumbering goes, I think we could support that in Python 3.3+,
though I don't have any brilliant ideas on syntax. �A couple of suggestions
are in this bug:
https://bugs.launchpad.net/flufl.enum/+bug/1110507
e.g
class Colors(Enum):
� � red = None
� � green = None
� � blue = None
or
from flufl.enum import Enum, auto
class Colors(Enum):
� � red = auto
� � green = auto
� � blue = auto
I'm definitely open to suggestions here!
Barry, since you've obviously given this issue a lot of thought, maybe you could summarize it in a PEP so we have a clear way of moving forward for 3.4 ?
Eli