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

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

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

小怪兽爱吃肉 2019-07-15 15:01:34
为什么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为了使其工作,执行了一些编译时魔术,其结果之一是下面的代码(重新绑定)super到super_)失败: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中还有其他函数、方法等的例子可以通过将它们重新绑定到不同的名称来打破吗?
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

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

查看完整回答
反对 回复 2019-07-15
  • 2 回答
  • 0 关注
  • 372 浏览
慕课专栏
更多

添加回答

举报

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