«UnboundLocalError: ссылка на локальную переменную перед присвоением». Почему правило LEGB не применяется в этом случае?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 «UnboundLocalError: ссылка на локальную переменную перед присвоением». Почему правило LEGB не применяется в этом случае?

Сообщение Anonymous »

Меня немного смущает область видимости переменных в Python. Пожалуйста, объясните разницу между приведенными ниже фрагментами.

Код: Выделить всё

class Test(object):
a_var = 1

def a_func(self):
self.a_var = self.a_var + 1
print(self.a_var, '[ a_var inside a_func() ]')

if __name__ == '__main__':
t = Test()
t.a_func()
Выход: 2 [a_var внутри a_func()]

Код: Выделить всё

class Test(object):
a_var = 1

def a_func(self):
a_var = a_var + 1
print(a_var, '[ a_var inside a_func() ]')

if __name__ == '__main__':
t = Test()
t.a_func()
Вывод: UnboundLocalError: локальная переменная «a_var», указанная перед присвоением
Почему правило LEGB не применяется во втором случае? Разве он не должен получать значение из закрытой области видимости, являющейся классом?

Подробнее здесь: https://stackoverflow.com/questions/451 ... egb-rule-n
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»