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

Sin*_*ned 3 python namespaces

在python中,以下工作正常:

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

test_foo()
Run Code Online (Sandbox Code Playgroud)

但是,以下内容失败NameError: name 'Foo' is not defined:

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

test_foo()
Run Code Online (Sandbox Code Playgroud)

为什么这个名字,我分配影响多数民众赞成被分配值的查找?

Sve*_*ach 6

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

Foo = Foo
Run Code Online (Sandbox Code Playgroud)

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

如果你尝试,也会发生同样的事情

def test_foo():
    foo = 3
    class A:
        bar = foo
        foo = 42

test_foo()
Run Code Online (Sandbox Code Playgroud)

  • 为清楚起见,您可以考虑将上面的代码放在`def test_foo():`块中.如果完全按照书面形式输入(在模块的全局范围内使用`foo`),则此代码不会生成错误! (2认同)