SyntaxError нелокальный питон в определении метода
Я набираю в интерактивном режиме следующий код:
class A:
a=42
def foo():
nonlocal a
но у меня есть SyntaxError: no binding for nonlocal 'a' found
, Но я ожидаю, что результат разрешения nonlocal a
будет 42, потому что ближайшая окружающая область для этого метода - блок класса.
2 ответа
Область видимости класса обрабатывается особым образом Python: при поиске имен в конечных областях области классов пропускаются.
Для доступа к имени из области видимости либо используйте self.a
искать через экземпляр или A.a
искать через класс.
См . Область имен, определенных в блоке класса, не распространяется на блоки методов. Это почему? для обоснования этого поведения.
То, что вы делаете, это создание class
который имеет атрибут класса a
со значением по умолчанию 42
, Вы можете обратиться к этому атрибуту A.a
, Если вы хотите использовать его в классе, используйте self.a
,