Материалы, подготовленные в результате оказания услуги, помогают разобраться в теме и собрать нужную информацию, но не заменяют готовое решение.

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

Статью подготовили специалисты образовательного сервиса Zaochnik.

Содержание:

Python является языком программирования с динамической типизацией, и полиморфизм в нем присутствует на каждом шагу.

Понятие полиморфизма

На самом деле, большинство операций в Python являются полиморфическими:

Пример 1

Вывод, доступ к элементам, оператор `*` и многие другие.

В этом языке именно объекты задают синтаксический смысл операций.

Пример 2

Оператор `*` — это лишь указание для обрабатываемых объектов. Значение операции символь зависит от типов данных входящих объектов.

Одной и той же функции можно применяться к широкой категории типов объектов. Если объекты соответствуют ожидаемому интерфейсу (или протоколу), функция сможет их обработать. Если объект, переданный функции, обладает нужными методами и операторами, он будет совместим с функционалом.

Если функция получит объекты, не поддерживающие ожидаемый интерфейс, интерпретатор выбросит ошибку во время выполнения и выдаст соответствующее исключение. Применять проверку на ошибки в коде можно заменить проверкой в процессе тестирования программы. Внедрив такую проверку, мы ограничим возможности нашей функции, так как она сможет работать только с теми типами объектов, которые мы заранее указали.

Замечание 1

Ключевое отличие подхода Python от языков со статической типизацией, таких как C++ и Java: код на Python не делает предположений о конкретных типах данных. В противном случае он будет функционировать лишь с теми типами данных, которые были предусмотрены при его разработке, и не сможет поддерживать другие подходящие типы, которые могут быть определены позже.

Проверить тип объекта можно через встроенную функцию `type`, однако это может привести к утрате гибкости кода.

Конечно, такая модель полиморфизма требует тестирования программы на наличие ошибок, так как из-за отсутствия явных объявлений типов компилятор не в состоянии найти некоторые ошибки на ранних этапах. Тем не менее, за небольшое увеличение времени на отладку мы получаем значительно меньше написанного кода и больше гибкости.

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

Замечание 2

В 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))

Навигация по статьям

Выполненные работы по программированию

  • Программирование

    НИР на тему Автоматизированое рабочее места специалиста по социальной работе

    • Вид работы:

      Отчёт по практике

    • Выполнена:

      25 февраля 2020

    • Стоимость:

      1 900 руб.

    Заказать такую же работу
  • Программирование

    Обеспечение защиты информации при использовании системы электронного документооборота

    • Вид работы:

      Реферат

    • Выполнена:

      29 декабря 2019

    • Стоимость:

      500 руб.

    Заказать такую же работу
  • Программирование

    Искусственный интеллект. Достижения и перспективы развития.

    • Вид работы:

      Эссе

    • Выполнена:

      11 декабря 2019

    • Стоимость:

      800 руб.

    Заказать такую же работу
  • Программирование

    Айти. Заполнить дневник практики.

    • Вид работы:

      Отчёт по практике

    • Выполнена:

      9 декабря 2019

    • Стоимость:

      1 800 руб.

    Заказать такую же работу
  • Программирование

    Если свободное общество не сможет помочь многим бедным, оно не сможет защитить немногих богатых

    • Вид работы:

      Эссе

    • Выполнена:

      8 декабря 2019

    • Стоимость:

      1 000 руб.

    Заказать такую же работу
  • Программирование

    Двоичные деревья поиска, Организация поиска в массиве данных при помощи специальных методов поиска, Сортировка

    • Вид работы:

      Отчёт по практике

    • Выполнена:

      28 октября 2019

    • Стоимость:

      1 700 руб.

    Заказать такую же работу