Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 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; просмотров: 399; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.237.51.235 (0.003 с.) |