На этот вопрос уже есть ответ:
Из этой ветки: m застрял в том, как нелокальный оператор работает внутри определения класса. Насколько я понимаю, определение класса ...
Я пытаюсь выполнить некоторый анализ области видимости в исходном коде Python 3, и я застрял в том, как оператор нелокального оператора работает внутри определения класса.
Как Я понимаю, что определение класса выполняет свое тело внутри нового пространства имен (назовите его dict) и связывает имя класса с результатом типа (name, base, dict). Нелокальный x должен работать, пока он ссылается на переменную, которая привязана где-то во включающей нелокальной области.
Исходя из этого, я ожидаю, что следующий код будет скомпилирован и запущен:
class A:
v = 1
class B:
nonlocal v
v = 2
но это не удается с
SyntaxError: no binding for nonlocal 'v' found
, тогда как следующий код работает отлично
def A():
v = 1
class B:
nonlocal v
v = 2
Может ли кто-нибудь объяснить разницу между закрытием определения функции и определением класса?