- 6 августа 2025
- 4 минуты
- 214
Полиморфизм функций в Python
Статью подготовили специалисты образовательного сервиса Zaochnik.
Python является языком программирования с динамической типизацией, и полиморфизм в нем присутствует на каждом шагу.
Понятие полиморфизма
На самом деле, большинство операций в Python являются полиморфическими:
Вывод, доступ к элементам, оператор `*` и многие другие.
В этом языке именно объекты задают синтаксический смысл операций.
Оператор `*` — это лишь указание для обрабатываемых объектов. Значение операции символь зависит от типов данных входящих объектов.
Одной и той же функции можно применяться к широкой категории типов объектов. Если объекты соответствуют ожидаемому интерфейсу (или протоколу), функция сможет их обработать. Если объект, переданный функции, обладает нужными методами и операторами, он будет совместим с функционалом.
Если функция получит объекты, не поддерживающие ожидаемый интерфейс, интерпретатор выбросит ошибку во время выполнения и выдаст соответствующее исключение. Применять проверку на ошибки в коде можно заменить проверкой в процессе тестирования программы. Внедрив такую проверку, мы ограничим возможности нашей функции, так как она сможет работать только с теми типами объектов, которые мы заранее указали.
Ключевое отличие подхода Python от языков со статической типизацией, таких как C++ и Java: код на Python не делает предположений о конкретных типах данных. В противном случае он будет функционировать лишь с теми типами данных, которые были предусмотрены при его разработке, и не сможет поддерживать другие подходящие типы, которые могут быть определены позже.
Проверить тип объекта можно через встроенную функцию `type`, однако это может привести к утрате гибкости кода.
Конечно, такая модель полиморфизма требует тестирования программы на наличие ошибок, так как из-за отсутствия явных объявлений типов компилятор не в состоянии найти некоторые ошибки на ранних этапах. Тем не менее, за небольшое увеличение времени на отладку мы получаем значительно меньше написанного кода и больше гибкости.
Полиморфизм функций
В Python отсутствует полиморфизм функций, как в C++. Каждая функция должна иметь уникальное имя.
Подходящим решением будет полиморфизм по типу объекта, для которого функция вызывается, что требует вынесения функции в объект.
- Учитывая полиморфизм функций по типам аргументов в примере ниже с каждым из параметров произойдет своя операция: числа будут умножаться на два, а строка будет повторяться дважды:
python
def f(x):
return x * 2
f(1) * f("2")
f(3.) * f(f(4))
- Когда мы вызываем `print(f(5))`, будет активирована последняя функция, и результат вычислений составит 15. При этом первые две функции, уничтоженные в пространстве имен, фактически перестают существовать.
python
def f(x):
return x
def f(x):
return 2 * x
def f(x):
return 3 * x
print(f(5))