Начиная с https://realpython.com/python-super/, приводится пример того, как super () используется для инициализации родительского класса. Пример кода:
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
def area(self):
return self.length * self.width
def perimeter(self):
return 2 * self.length + 2 * self.width
class Square(Rectangle):
def __init__(self, length):
super().__init__(length, length)
super()
для вызова __init__()
класса Rectangle, что позволяет использовать его в классе Square без повторения кода.
Хотя, если я определю класс Square следующим образом:
class Square(Rectangle):
pass
Я могу использовать весь родительский метод, создав объект:
square = Square(4,4)
Вызов square.area выдает 16, как и ожидалось.
В книге Python 3 объектно-ориентированного программирования П. Дасти, объяснение лучше (стр.71):
[... ] для суперкласса можно go неинициализироваться, если мы пренебрегаем явным вызовом инициализатора.
В случае множественного наследования от одного родительского класса автор упоминает, что:
возможность многократного вызова суперкласса из-за организации иерархии классов
Я понимаю последний момент, который объясняется на примере, показывающем, что идентичное имя метода можно назвать множественным раз в случае множественного наследования. Однако в случае простого наследования можно задаться вопросом, действительно ли это вызовет проблемы. Кроме того, я не вижу, как родительский класс не мог быть инициализирован ...