nonlocal
语句分配给闭包变量,包括magic
__class__
闭包变量。分配给
__班级__
没有一个
非局部的
语句创建一个局部变量来隐藏magic闭包变量。
__班级__
表现得像是当地人
meth
,但实际上它的行为就好像它是一个不可见的伪作用域的局部,在这个伪作用域中
Demo
是嵌套的。如果它被视为当地的
,你不需要
非局部的
.
如果你加了一个
非局部的
声明、实施
actually will allow you
要重新指定magic闭包变量,请执行以下操作:
class Foo:
def meth(self):
nonlocal __class__
__class__ = 3
super()
Foo().meth()
结果:
Traceback (most recent call last):
File "./prog.py", line 7, in <module>
File "./prog.py", line 5, in meth
RuntimeError: super(): __class__ is not a type (int)