python 中的属性未引发嵌套函数的 UnboundLocalError

UnboundLocalError for nested function NOT raised for attribute in python

我在 UnboundLocalError 上简要浏览了几十个关于 python 中的嵌套函数的问题,我认为我理解了,直到我尝试使用自定义 class实例

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 中没有出现错误?

因为您没有分配给非本地名称。你用了一个,但没关系;您分配了它的一个属性,而没有更改名称本身所绑定的内容。

请注意,如果 b 是一个列表或字典并且您修改了其中一个成员,这将完全相同。