Полиморфизм простыми словами
Полиморфизм — когда один и тот же вызов работает по-разному для разных объектов. Звучит сложно, а на деле удобно.
Один вызов — разное поведение
Если у разных классов есть метод с одинаковым именем, можно вызывать его, не зная точный тип объекта, — каждый ответит по-своему. Скажем, у кошки и собаки метод say() печатает «мяу» и «гав»: вызов один, поведение разное.
class Cat:
def say(self): print('мяу')
class Dog:
def say(self): print('гав')
for a in [Cat(), Dog()]:
a.say() # мяу / гав
Зачем это нужно
Полиморфизм позволяет писать код, который работает с разными объектами единообразно. Вы перебираете список животных и вызываете say() у каждого — не заботясь, кто там кот, а кто пёс. Код проще и легче расширяется новыми классами.
Связь с наследованием
Часто полиморфизм строят на наследовании: общий родитель задаёт метод, а потомки его переопределяют. Но в Python достаточно, чтобы у объектов просто был метод с нужным именем, — язык это допускает гибко.
Частые вопросы
Полиморфизм требует наследования? В Python не обязательно — достаточно одинакового имени метода.
Где это встречается? Повсюду: len() работает и со списком, и со строкой — это тоже полиморфизм.
Начать игру бесплатно