将神奇的零参数super()反向移植到python2
autosuper的Python项目详细描述
这是一个(可怕的,黑的,wtf你在想)尝试移植魔法 从python3到python2的零参数super()调用
在super()内置函数的标准python2用法中,必须重复 调用super时类和实例对象,如下所示:
- class Hello(Base):
- def hello(self):
- super(Hello,self).hello()
使用autosuper,您可以从python3获得更友好的行为 只需在运行时找出正确的调用:
- class Hello(Base):
- def hello(self):
- super().hello()
当然,如果您想这样做,您仍然可以显式地传递参数 奇怪的事。有时候你真的很想这样,比如跳过 方法解析顺序中的某些类
它是如何工作的?通过检查调用帧来确定函数 执行的对象和调用它的对象,然后 遍历对象的mro链以找出该函数的位置 定义。很难受,但似乎很管用