为了账号安全,请及时绑定邮箱和手机立即绑定

为什么分配给 __class__ 单元格会破坏 `super`?

为什么分配给 __class__ 单元格会破坏 `super`?

胡子哥哥 2021-06-10 18:20:54
我读过为什么 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__像其他闭包变量一样重新赋值?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信