为什么Python3.x的超级()魔法?

为什么Python3.x的超级()魔法?

在Python 3.x中,super()可以在没有参数的情况下调用:

class A(object):
    def x(self):
         print("Hey now")class B(A):
    def x(self):
        super().x()
>>> B().x()
Hey now

为了使其工作,执行了一些编译时魔术,其结果之一是下面的代码(重新绑定)supersuper_)失败:

super_ = superclass A(object):
    def x(self):
        print("No flipping")class B(A):
    def x(self):
        super_().x()
>>> B().x()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in x
RuntimeError: super(): __class__ cell not found

为什么super()没有编译器的帮助,无法在运行时解析超类?有没有实际情况下,这种行为,或它的根本原因,可能咬一个粗心的程序员?

..还有一个附带的问题:Python中还有其他函数、方法等的例子可以通过将它们重新绑定到不同的名称来打破吗?


小怪兽爱吃肉
浏览 374回答 2
2回答

慕勒3428872

这篇文章并不是关于super()无参数工作;它主要处理的是为什么它的存在。super(),在类方法中,等于super(ReferenceToClassMethodIsBeingDefinedIn, self),在哪里ReferenceToClassMethodIsBeingDefinedIn在编译时确定,并将其作为名为__class__,和super()将在运行时从调用框架中查找两者。但你不需要知道这一切。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python