super()
использует Порядок разрешения методов (MRO) , чтобы определить, какой метод суперкласса вызывается.
Лучший способ контролировать, какой метод класса в случае множественного наследования, это вызывать его явно, без использования super()
.
Или вы можете изменить порядок суперклассов в определении подкласса, чтобы изменить MRO. Это позволяет вам продолжать использовать super()
, но жертвует некоторой читабельностью, IMO.
Пример использования super()
:
class Wolf(C, Animal):
def eat(self):
# C.eat() comes first in the MRO
super(Wolf, self).eat()
Versus:
class Wolf(Animal, C):
def eat(self):
# Animal.eat() comes first in the MRO
super(Wolf, self).eat()