У меня есть следующий код:
class A:
pass
class B(A):
def foo(self, a):
if a:
return 'B'
return super(B, self).foo(a)
class C:
def foo(self, a):
return 'C'
class D(B, C):
def foo(self, a):
return super().foo(a)
d = D()
print(d.foo(0))
Когда я вызываю d.foo(0)
на основе MRO, он сначала вызывает метод foo
класса B
и внутри него, если условие неверно, и он возвращает super(B, self).foo(0)
, но класс A
не имеет метода foo, и я ожидаю эту ошибку:
AttributeError: 'super' object has no attribute 'foo'
но он возвращает 'C'
из класса C
. Почему?
super
. Подумайте об этом - если бы он вызывал родителя напрямую, вам вообще не понадобился быsuper
в языке, вы бы просто вызвалиA
прямо здесь. - person wim   schedule 29.07.2017