В 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 другие примеры функций, методов и т.д., которые можно сломать, перебирая их на другое имя?