最佳答案
在 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_ = super
class 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 中还有其他的函数、方法等例子可以通过将它们重新绑定到一个不同的名字来破解吗?