为什么分配变量名称_to_会影响值的查找?

时间:2011-02-14 16:59:44

标签: python namespaces

在python中,以下工作正常:

def test_foo():
    class Foo(object):
        pass
    class Fam(object):
        bar = Foo

test_foo()

然而,以下NameError: name 'Foo' is not defined

失败
def test_foo():
    class Foo(object):
        pass
    class Fam(object):
        Foo = Foo

test_foo()

为什么我将分配给的名称会影响对所分配值的查找?

1 个答案:

答案 0 :(得分:6)

在类定义中分配名称Foo这一事实使得名称Foo成为该范围内的本地名称(即类的范围)。在解析和编译为字节代码期间,本地名称是静态确定的。当执行到达语句

Foo = Foo

Python首先评估右侧。它查找本地名称Foo - 在编译期间确定 - 并且无法在本地范围内找到它。因此错误。

如果您尝试

,也会发生同样的情况
def test_foo():
    foo = 3
    class A:
        bar = foo
        foo = 42

test_foo()