Accediendo a las variables de clase desde una lista de comprensión en la definición de clase.
¿Cómo accede a otras variables de clase desde una lista de comprensión dentro de la definición de clase? Lo siguiente funciona en Python 2, pero falla en Python 3:
class Foo:
x = 5
y = [x for i in range(1)]
Python 3.2 da el error:
NameError: global name 'x' is not defined
MolestoFoo.x
Tampoco funciona. ¿Alguna idea sobre cómo hacer esto en Python 3?
Un ejemplo de motivación un poco más complicado:
from collections import namedtuple
class StateDatabase:
State = namedtuple('State', ['name', 'capital'])
db = [State(*args) for args in [
['Alabama', 'Montgomery'],
['Alaska', 'Juneau'],
# ...
]]
En este ejemplo,apply()
habría sido una solución decente, pero lamentablemente se eliminó de Python 3.