Re: [Python-Dev] class name spaces inside an outer function

2013年4月27日 23:12:41 -0700

On 04/27/2013 09:20 PM, Guido van Rossum wrote:
On Saturday, April 27, 2013, Greg Ewing wrote:
 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.
If you want something like this, doyou really have to inherit from Enum?
If I'm saying what you already know I apologize now, but this thread is about 
what happens when:
 class InsertsName(type):
 @classmethod
 def __prepare__(metacls, cls, bases):
 classdict = {'new_name': lambda: 'haha!'}
 return classdict
 def test():
 new_name = 'Jose' # if here will result in str not callable error
 class SomeClass(metaclass=InsertsName):
 surprise = new_name()
 new_name = 'Clara' # if here will result in NameError: free variable...
However, if that class definition is either top level, or if the function itself does not define nor use the 'new_name', there is no problem.
Enum was being used in the example because that's what I was toying with when I 
found the problem.
--
~Ethan~
_______________________________________________
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to