我读过为什么 Python 3.x 的 super() 魔术?并了解使用super或__class__在方法中将自动__class__为该方法创建一个单元格变量:class Demo: def meth(self): super().meth()>>> Demo.meth.__closure__(<cell at 0x7f4572056138: type object at 0x564bda0e5dd8>,)>>> Demo.meth.__closure__[0].cell_contents<class '__main__.Demo'>据我所知,单元格用于保存闭包变量并且可以自由修改:def outer(): x = 3 def inner(): print(x) x = 5 return innerinner = outer()inner() # output: 5>>> inner.__closure__(<cell at 0x7f2183a5e138: int object at 0x7f2184600460>,)但是尝试重新分配__class__单元格的值会super引发一个奇怪的错误:class Demo: def meth(self): __class__ = Demo super().meth()Demo().meth()Traceback (most recent call last): File "untitled.py", line 8, in <module> Demo().meth() File "untitled.py", line 6, in meth super().meth()RuntimeError: super(): __class__ cell not found为什么会发生这种情况?为什么不能__class__像其他闭包变量一样重新赋值?
添加回答
举报
0/150
提交
取消