Ara*_*Fey 5 python attributes class function
考虑这个类定义:
def func():
x = 5
class Foo:
x = x
func()
Run Code Online (Sandbox Code Playgroud)
我希望这创建一个属性x设置为5的类 - 但它会抛出一个NameError:
Traceback (most recent call last):
File "untitled.py", line 7, in <module>
func()
File "untitled.py", line 4, in func
class Foo:
File "untitled.py", line 5, in Foo
x = x
NameError: name 'x' is not defined
Run Code Online (Sandbox Code Playgroud)
但是,该错误仅在函数内部引发,并且仅在x局部变量时才会引发.所有这些片段都可以正常工作:
x = 5
class Foo:
x = x
Run Code Online (Sandbox Code Playgroud)
x = 5
def func():
class Foo:
x = x
func()
Run Code Online (Sandbox Code Playgroud)
class Bar:
x = 5
class Foo:
x = x
Run Code Online (Sandbox Code Playgroud)
def func():
x = 5
class Foo:
y = x
func()
Run Code Online (Sandbox Code Playgroud)
是什么导致了这种奇怪的行为?
因为Python编译器在确定哪些变量是局部变量时会查看代码块中的所有左值。由于在有问题的代码中,x被用作块中的左值class,因此它被视为该class块的本地变量,因此,它被认为在被赋值之前被引用,因此出现异常。