UnboundLocalError для вложенной функции НЕ вызывается для атрибута в python - PullRequest
0 голосов
/ 22 февраля 2019

Я кратко просмотрел пару десятков qus на UnboundLocalError для вложенных функций в python, и я думал, что понял, пока не попробовал его с пользовательским экземпляром класса

def fn1():
    a = 1

    def fn1a():
        print(a)
        a += 1
        print(a)

    fn1a()


class B:
    v = 1


def fn2():
    b = B()

    def fn2a():
        print(b.v)
        b.v += 1
        print(b.v)

    fn2a()


fn2()  # prints 1 then 2
fn1()  # raises UnboundLocalError

Почему неошибка возникает в fn2?

1 Ответ

0 голосов
/ 22 февраля 2019

Потому что вы не присвоили нелокальное имя.Вы использовали один, но это нормально;Вы присвоили один из его атрибутов, не изменяя то, с чем связано само имя.

Обратите внимание, это будет работать точно так же, если бы b был списком или диктом, и вы изменили один из его членов.

...