![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Полиморфизм функций в Python
Python – язык с динамической типизацией, полиморфизм в нем проявляется повсюду. Фактически все операции в языке Python являются полиморфическими: вывод, извлечение элемента, оператор * и многие другие. В языке Python именно объекты определяют синтаксический смысл операции. Например, оператор * – это всего лишь указание для обрабатываемых объектов. Смысл операции зависит от типов обрабатываемых объектов. Единственная функция может автоматически применяться к целой категории типов объектов. Пока объекты поддерживают ожидаемый интерфейс (или протокол), функция сможет обрабатывать их. Если объект, фактически передаваемый функции, поддерживает ожидаемые методы и операторы выражений, он будет совместим с логикой функции. Если функции будут переданы объекты, которые не поддерживают ожидаемый интерфейс, интерпретатор обнаружит ошибку при выполнении и автоматически возбудит исключение. Отсутствие проверки на наличие ошибок в программном коде можно заменить последующим тестированием программы. Добавив такую проверку, мы ограничим область применения нашей функции, так как она сможет работать только с теми типами объектов, которые мы заранее предусмотрели. Это важнейшее отличие философии языка Python от языков программирования со статической типизацией, таких как C++ и Java: программный код на языке Python не делает предположений о конкретных типах данных. В противном случае он сможет работать только с теми типами данных, которые ожидались на момент его написания, и он не будет поддерживать объекты других совместимых типов, которые могут быть созданы в будущем. Проверку типа объекта можно выполнить с помощью таких средств, как встроенная функция type, но в этом случае программный код потеряет свою гибкость. Конечно, такая модель полиморфизма предполагает необходимость тестирования программного кода на наличие ошибок, так как из-за отсутствия объявлений типов нет возможности с помощью компилятора выявить некоторые виды ошибок на ранней стадии. Однако в обмен на незначительное увеличение объема отладки мы получаем существенное уменьшение объема программного кода, который требуется написать, и существенное увеличение его гибкости. В языке Питон отсутствует полиморфизм функций в модели С++. Разные функции должны иметь разные имена.
Адекватной заменой является полиморфизм по типу объекта, для которого вызывается функция, что требует перенесения функции в объект (будет изучаться в уроках по ООП). КОНТРОЛЬНЫЕ ВОПРОСЫ 1. Будет ли ошибочным следующий код: def f(x): f(1) * f("2") f(3.) * f(f(4)) РЕШЕНИЕ Нет, не будет. Благодаря полиморфизму функций по типам параметров с каждым из аргументов будет приключаться своё: числа будут умножаться на два, а строка — повторяться дважды.
2. Будет ли ошибочным следующий код: def f(x): def f(x): def f(x): print(f(5)) РЕШЕНИЕ Нет, не будет. При этом первые две функции, поскольку их имена более недоступны в пространстве имен, фактически перестают существовать. При вызове print(f(5)) будет вызвана последняя функция, результат вычислений будет равен 15. Утиная типизация Утиной типизацией в программировании называют следующий принцип: Если что-то ходит как утка и крякает как утка, то это утка. Применяется этот принцип следующим образом. Пусть, например, у нас есть функция max, определенная следующим образом: def max(a, b): Какого типа объекты ей можно передать? Оказывается, тип объектов эту функцию не интересует вовсе. Ей важно лишь, чтобы для этих объектов была определена операция > (иногда говорят " определен соответствующий интерфес"). В этом смысле объекты, передаваемые функции max, должны лишь "крякать как утки".
|
|||||
Последнее изменение этой страницы: 2017-02-19; просмотров: 406; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.178.234 (0.004 с.) |