Ответ
Полиморфизм — это один из ключевых принципов объектно-ориентированного программирования (ООП), который позволяет объектам разных классов отвечать на один и тот же вызов (например, вызов метода) по-разному. Буквально это означает "множество форм".
Основная идея — создать единый интерфейс для работы с группой связанных объектов, не вдаваясь в детали их конкретной реализации.
Как это работает в Python (утиная типизация):
В Python полиморфизм часто проявляется через "утиную типизацию" (duck typing): "Если нечто крякает как утка и плавает как утка, то это утка". То есть, важна не принадлежность объекта к определенному классу, а наличие у него необходимых методов и атрибутов.
Пример:
Функция process_documents
может работать с любым объектом, у которого есть метод .render()
, независимо от его класса.
class HtmlDocument:
def render(self):
print("Рендеринг HTML документа...")
class PdfDocument:
def render(self):
print("Рендеринг PDF документа...")
class WordDocument:
def render(self):
print("Рендеринг Word документа...")
def process_documents(documents):
# Эта функция не знает, какие именно объекты ей переданы.
# Она просто вызывает метод .render() для каждого из них.
for doc in documents:
doc.render()
# Создаем список объектов разных, но совместимых по интерфейсу классов
docs = [HtmlDocument(), PdfDocument(), WordDocument()]
process_documents(docs)
# Вывод:
# Рендеринг HTML документа...
# Рендеринг PDF документа...
# Рендеринг Word документа...
Основные преимущества полиморфизма:
- Гибкость и расширяемость: Можно добавлять новые классы (например,
MarkdownDocument
) с методом.render()
, и существующий код (process_documents
) будет работать с ними без изменений. Это соответствует Принципу открытости/закрытости (Open/Closed Principle). - Уменьшение связанности (Loose Coupling): Код, использующий полиморфные объекты, не зависит от их конкретных классов, а только от общего интерфейса.
- Упрощение кода: Устраняет необходимость в громоздких конструкциях
if/elif/else
для проверки типа объекта.