On 04/27/2013 07:01 PM, Greg Ewing wrote:
PJ Eby wrote:
On Sat, Apr 27, 2013 at 2:27 PM, Ethan Furman <et...@stoneleaf.us> wrote:
I filed bug http://bugs.python.org/issue17853 last night.
About the only workaround I can see is to put "Season = Season" at the
top of a class that uses this inside a function definition,
This whole business can be avoided by doing things differently
in the first place. Instead of initialising the enum items by
calling the class, just assign a tuple of args to the name
and have the metaclass make the constructor call.
class Planet(Enum):
MERCURY = (3.303e+23, 2.4397e6)
VENUS = (4.869e+24, 6.0518e6)
EARTH = (5.976e+24, 6.37814e6)
MARS = (6.421e+23, 3.3972e6)
JUPITER = (1.9e+27, 7.1492e7)
SATURN = (5.688e+26, 6.0268e7)
URANUS = (8.686e+25, 2.5559e7)
NEPTUNE = (1.024e+26, 2.4746e7)
def __init__(self, mass, radius):
self.mass = mass
self.radius = radius
I think that's better anyway, since it avoids aggravated
violation of DRY by repeating the class name umpteen times.
You certainly have a point about DRY, and generally I agree with you, but given the nature of Enums I can see a little
extra RY being useful.
Regardless of the outcome for Enums, I can see another metaclass doing the same kind of thing and having it work just
fine until an unsuspecting soul tries to reuse an inserted name further down the function and suddenly the whole thing
blows up on him.
Now, I'll grant you it's not like a seg fault, but it would be nice if Python
followed its own lookup rules.
--
~Ethan~
_______________________________________________
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