super() при множественном наследовании позволяет вызывать методы родительских классов, следуя MRO (Method Resolution Order) – порядку разрешения методов.  Он гарантирует, что каждый родительский класс будет инициализирован только один раз. super() передает вызов следующему классу в MRO, а не фиксированному родителю, обеспечивая гибкое сотрудничество между классами в иерархии. MRO определяется алгоритмом C3 linearization.
 Метод super() в Python при множественном наследовании обеспечивает механизм вызова методов классов-родителей в определенном порядке, который определяется так называемым Method Resolution Order (MRO).  Он не просто вызывает родительский класс, а динамически ищет следующий класс в MRO, который имеет запрошенный метод.
Основные принципы работы:
__mro__ или mro() класса.super() не является жесткой ссылкой на родительский класс.  Вместо этого, он создает прокси-объект, который ищет следующий класс в MRO, имеющий запрошенный метод, начиная с класса, следующего за тем, в котором был вызван super().super():  super(класc, self) принимает два аргумента:
    класc: Класс, в котором вызывается super(). Обычно это текущий класс.self: Объект экземпляра класса.  Он передается неявно, если super() вызывается внутри метода экземпляра.super()), и они будут выведены автоматически.
   super() позволяет реализовать кооперативное множественное наследование, где каждый класс в иерархии отвечает за определенную часть инициализации или обработки, а затем передает управление следующему классу в MRO через super(). Это особенно полезно для избежать повторной инициализации или конфликтов между методами разных родительских классов.Пример:
class A:
    def __init__(self):
        print("A.__init__")
        super().__init__()
class B:
    def __init__(self):
        print("B.__init__")
        super().__init__()
class C(A, B):
    def __init__(self):
        print("C.__init__")
        super().__init__()
instance = C()
print(C.__mro__)
  Вывод:
C.__init__
A.__init__
B.__init__
<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>
  В этом примере, MRO класса C - это (C, A, B, object).  При создании экземпляра класса C,  C.__init__() вызывается первым, затем A.__init__(), затем B.__init__() и наконец object.__init__().  super() в каждом методе гарантирует, что метод следующего класса в MRO будет вызван, обеспечивая корректную инициализацию всех классов в иерархии.
Важно: Правильное использование super() требует тщательного планирования и понимания MRO, чтобы гарантировать, что все классы в иерархии будут правильно инициализированы и что методы будут вызываться в ожидаемом порядке.  Неправильное использование может привести к неожиданному поведению и ошибкам.