Глава 14 · Создаём объекты реального мира

Полиморфизм

Одна и та же строка кода — .zvuk() — ведёт себя по-разному в зависимости от того, какой именно объект её вызвал.

Один вызов, разные результаты

Полиморфизм («много форм») — когда один и тот же вызов метода даёт разное поведение в зависимости от того, у объекта какого класса он вызван:

polimorfizm.py
class Sobaka:
    def zvuk(self):
        return "Гав!"


class Koshka:
    def zvuk(self):
        return "Мяу!"


class Korova:
    def zvuk(self):
        return "Му!"


zhivotnye = [Sobaka(), Koshka(), Korova()]
for zh in zhivotnye:
    print(zh.zvuk())    # каждый раз вызывается СВОЯ версия zvuk()
zvuk()SobakaГав!KoshkaМяу!KorovaМу!
Один и тот же вызов .zvuk() — разный результат для каждого класса
Цикл не знает и не должен знать, с каким классом работает
Строка zh.zvuk() внутри цикла ОДНА — ей не нужно проверять if isinstance(zh, Sobaka): ... и так для каждого класса. Именно в этом ценность полиморфизма: код, который ИСПОЛЬЗУЕТ объекты, остаётся простым и не растёт с каждым новым классом животного.
Практика: полиморфизм
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →