Найти тему
programmer's notes (python and more)

ООП на Python. Полиморфизм в наследовании. Приложение 2 к видео 8

Доброго времени суток, читатели, зрители моего канала programmer's notes.

Приложение 2 к видеоуроку. А здесь первое приложение

Полиморфизм в наследовании

Как я уже неоднократно говорил и писал в данном курсе, полиморфизм представляет собой разную реакцию объекта на разные входные условия. В объектно-ориентированном программировании часто сводят полиморфизм к схожему интерфейсу у разных объектов, которые однако имеют некоторый общий смысл. Примером может служить объекты, описывающие геометрические фигуры. Допустим треугольник и окружность. Их как раз и объединяет то, что это геометрические фигуры. С другой стороны они разные. Но если у объекта треугольник и объекта окружность есть метод, с помощью которого эти фигуры изображаются на экране (например set_fig), то это как раз пример полиморфизма. Методы называются одинаково, потому-что выполняют схожую функцию, но рисуют разные фигуры.

Заметим, что описанные в предыдущем абзаце классы окружностей и треугольников, можно рассматривать дочерними к более общему классу. Класс этот можно назвать классом геометрических фигур. И здесь полиморфизм начинает играть уже совсем другими красками. Если создать в родительском классе пустой метод set_fig(), то в дочерних классах можно переписать его в соответствие с геометрической фигурой. Переопределить метод родительского класса, значит переписать его под тем же именем в дочернем классе.

Ниже показана программа, где представлен пример полиморфизма - переопределение родительского класса.

Текст программы см. ниже
Текст программы см. ниже
primer213.py

Результат выполнения программы

['ПЕТРОВ', 'ИВАН', 'ИВАНОВИЧ']

Т.е. worker имеет метод с тем же именем, что у родительского класса, но выполняющий несколько иную работу. Вот это и есть одна сторона полиморфизма в наследовании.

Есть другая сторона полиморфизма. В некоторых случаях нам может потребоваться запустить переопределённый родительский метод. Для этого можно использовать функцию super().

Ниже представлен пример, отличающийся от первого тем, что в дочернем методе вызывается метод родительского класса.

Текст программы см. ниже
Текст программы см. ниже
primer214.py

Результат выполнения программы

Петров Иван Иванович

Вызов обычного метода из родительского класса встречается не так уж часто. Чаще вызываются специальные методы, в частности конструкторы. Действительно, в конструкторе обычно происходит инициализация переменных, иногда большого их количества. Повторить множество таких действий в дочернем классе не всегда разумно. Вот для этого и нужна функция super().

Смотрим программу ниже

Текст программы см. ниже
Текст программы см. ниже
primer215.py

Результат выполнения программы

1 2 3 100

Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Всё бы ничего, вот компилятор мешает программировать
Всё бы ничего, вот компилятор мешает программировать