Перейти к основному содержимому

Буквально слово «полиморфизм» означает «много форм». В программировании этот термин описывает методы, функции или операторы с одним и тем же именем, которые могут работать со многими разными объектами или классами.


Полиморфизм функций

Хороший пример в Python — встроенная функция len(), потому что она работает с объектами разных типов.

Пример

Для строки len() считает символы:

Prompt
Напишите программу на Python, которая применяет len() к строке "Hello World!" и выводит результат.
Вывод: полная программа на Python

Пример

Для кортежа len() считает элементы:

Prompt
Напишите программу на Python, которая применяет len() к кортежу из трёх фруктов и выводит результат.
Вывод: полная программа на Python

Пример

Для словаря len() считает пары «ключ/значение»:

Prompt
Напишите программу на Python, которая применяет len() к словарю с ключами brand, model и year и выводит результат.
Вывод: полная программа на Python

Полиморфизм классов

Полиморфизм часто встречается в методах классов: несколько классов могут определять метод с одним и тем же именем.

Допустим, у каждого из классов Car, Boat и Plane есть собственный метод move():

Обратите внимание на цикл for в конце кода. Именно полиморфизм позволяет ему выполнить один и тот же метод для объектов всех трёх классов.

Пример

Три класса с одинаковым именем метода:

Prompt
Напишите три класса Python — Car, Boat и Plane, — у каждого из которых есть метод move(), выводящий разные действия. Создайте объекты и в цикле вызовите для каждого из них move().
Вывод: полная программа на Python

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

Работает ли это с дочерними классами, у которых методы с одинаковым именем? Да.

Возьмите классы выше и добавьте родительский класс Vehicle, а Car, Boat и Plane сделайте его дочерними классами. Каждый дочерний класс получает методы Vehicle и может их переопределять:

Дочерний класс наследует свойства и методы своего родителя.

Посмотрите на Car в примере: тело этого класса пустое, но он всё равно получает brand, model и move() от Vehicle.

Boat и Plane тоже получают эти три члена от Vehicle, но каждый из них заменяет move() собственным переопределением.

Благодаря полиморфизму один и тот же вызов метода работает для всех этих классов.

Пример

Добавьте родительский класс с именем Vehicle и сделайте Car, Boat и Plane его дочерними классами:

Prompt
Напишите родительский класс Vehicle с методом move() и дочерние классы Car, Boat, Plane, в которых Boat и Plane переопределяют move(). В цикле пройдите по объектам, выводя brand, model и вызывая move().
Вывод: полная программа на Python