在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()
为什么我将分配给的名称会影响对所分配值的查找?
答案 0 :(得分:6)
在类定义中分配名称Foo
这一事实使得名称Foo
成为该范围内的本地名称(即类的范围)。在解析和编译为字节代码期间,本地名称是静态确定的。当执行到达语句
Foo = Foo
Python首先评估右侧。它查找本地名称Foo
- 在编译期间确定 - 并且无法在本地范围内找到它。因此错误。
如果您尝试
,也会发生同样的情况def test_foo():
foo = 3
class A:
bar = foo
foo = 42
test_foo()