Доступ к переменным класса из списка понимания в определении класса
Как вы получаете доступ к другим переменным класса из понимания списка в определении класса? Следующее работает в Python 2, но не работает в Python 3:
class Foo:
x = 5
y = [x for i in range(1)]
Python 3.2 выдает ошибку:
NameError: global name 'x' is not defined
ПопыткаFoo.x
тоже не работает. Любые идеи о том, как сделать это в Python 3?
Несколько более сложный мотивирующий пример:
from collections import namedtuple
class StateDatabase:
State = namedtuple('State', ['name', 'capital'])
db = [State(*args) for args in [
['Alabama', 'Montgomery'],
['Alaska', 'Juneau'],
# ...
]]
В этом примереapply()
был бы неплохой обходной путь, но он, к сожалению, удален из Python 3.