Суть
Наследование - одна из парадигм объектно-ориентированного программирования.
Родитель - класс, от которого наследуется новый класс
Потомок - новый класс, который наследует от родителя
При создании нового класса, мы можем написать его с нуля, либо же использовать уже существующий как основу. При втором варианте, новый класс будет дополнять свойства родителя и иметь доступ к его методам и полям.
Зачем?
Концепция наследования позволяет создавать измененные объекты относительно класса родителя.
Так экономится время на разработку и упрощается процесс написания программы.
Но не стоит увлекаться с наследованием, ведь при слишком большой иерархии классов, любое изменение родителей может привести к негативным последствиям работы их потомков.
Пример
Напишем класс, который будет родителем и будет выводить информацию о человеке:
Здесь используется конструктор с двумя аргументами и метод, который выводит форматированную строку. Ничего сложного.
Теперь создадим класс наследник, который будет выводить информацию о ребёнке:
Родитель класса указывается в скобках после названия нового класса.
super().__init__(name, age) - вызов конструктора родительского класса, который позволит не переопределять self.name и self.age.
Сама по себе команда super() - означает вызов метода из родительского класса.
Далее мы определяем новые аргументы, которые будут являться дополнением свойств родителя.
И переопределяем метод info() вывода информации с учётом новых свойств.
Создадим объекты классов и посмотрим на разницу:
Как видно, вызов конструктора сработал и количество принятых и выведенных аргументов разное в объектах класса родителя и его потомка.