在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中是否有其他的函数、方法等可以通过重新绑定它们的名称而被破坏的例子?