~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ D8163E1CC1AE7149F6BEA5D882A74789__1718660040 ✰
Заголовок документа оригинал.:
✰ Duck typing - Wikipedia ✰
Заголовок документа перевод.:
✰ Утка печатает — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Duck_typing ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/d8/89/d8163e1cc1ae7149f6bea5d882a74789.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/d8/89/d8163e1cc1ae7149f6bea5d882a74789__translat.html ✰
Дата и время сохранения документа:
✰ 24.06.2024 07:16:43 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 18 June 2024, at 00:34 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Утка печатает — Википедия Jump to content

Утка печатает

Из Википедии, бесплатной энциклопедии

В компьютерном программировании утиная печать — это применение теста на уток — «Если оно ходит как утка и крякает как утка, то это, должно быть, утка» — чтобы определить, объект можно ли использовать для определенной цели. При именительной типизации объект относится к заданному типу, если он объявлен как таковой (или если связь типа с объектом выводится с помощью таких механизмов, как наследование объекта ). При утиной типизации объект относится к заданному типу, если он имеет все методы и свойства, необходимые для этого типа. [1] [2] Утиную типизацию можно рассматривать как основанную на использовании структурную эквивалентность между данным объектом и требованиями типа.

Пример [ править ]

Этот простой пример в Python 3 демонстрирует, как любой объект может использоваться в любом контексте, пока он не будет использован способом, который он не поддерживает.

class   Duck  : 
     def   swim  (  self  ): 
         print  (  «Плавание утки»  ) 

     def   Fly  (  self  ): 
         print  (  «Утка летит»  ) 

 class   Whale  : 
     def   swim  (  self  ): 
         print  (  «Плавание кита»  ) 

 для   животного   в   [  Duck  (),   Кит  ()]: 
     животное  .   плавать  () 
     животное  .   летать  () 

Выход:

Утка плавает 
 Утка летает Плавает 
 кит 
 AttributeError: объект «Кит» не имеет атрибута «летать» 

Если предположить, что все, что умеет плавать, является уткой, поскольку утки умеют плавать, то кита можно считать уткой; однако, если также предположить, что утка должна быть способна летать, кит не будет считаться уткой.

В статически типизированных языках [ править ]

В некоторых статически типизированных языках, таких как Boo [3] и Д , [4] [5] Проверка типа класса может выполняться во время выполнения, а не во время компиляции.

Сравнение с другими системами типов [ править ]

Системы структурных типов [ править ]

Утиная типизация похожа на структурную типизацию , но отличается от нее . Структурная типизация — это статическая система типизации , которая определяет совместимость и эквивалентность типов по структуре типа, тогда как утиная типизация является динамической и определяет совместимость типов только по той части структуры типа, к которой осуществляется доступ во время выполнения .

Типскрипт , [6] Вяз [7] и Питон [8] языки в разной степени поддерживают структурную типизацию.

Протоколы и интерфейсы [ править ]

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

Шаблоны или общие типы [ править ]

Шаблонные (также называемые универсальными ) функции или методы применяют утиный тест в контексте статической типизации ; это раскрывает все преимущества и недостатки статической и динамической проверки типов . Утиная типизация также может быть более гибкой, поскольку должны быть реализованы только те методы, которые действительно вызываются во время выполнения, в то время как шаблоны требуют реализации всех методов, недостижимость которых не может быть доказана во время компиляции.

В таких языках, как Java, Scala и Objective-C, отражение может использоваться для проверки того, реализуют ли объекты методы или добавляют ли необходимые методы во время выполнения. Например, таким образом можно использовать Java MethodHandle API. [9]

См. также [ править ]

Ссылки [ править ]

  1. ^ «Глоссарий — документация Python 3.7.1» . docs.python.org . Проверено 8 ноября 2018 г.
  2. ^ «Утиная типизация на Python — пример» . Технические часы . 28.06.2020. Архивировано из оригинала 31 марта 2022 г. Проверено 26 июля 2020 г.
  3. Boo: Duck Typing. Архивировано 6 октября 2008 г., в Wayback Machine.
  4. ^ «Динамические классы и утиная типизация» .
  5. ^ «Метапрограммирование – утиное печатание на D» .
  6. ^ «SE Radio Episode 384: Борис Черный на TypeScript» . se-radio.net . Проверено 25 октября 2019 г.
  7. ^ Чаплицки, Эван. «Основной язык · Введение в Elm» . Проверено 30 января 2017 г.
  8. ^ «PEP 544 – Протоколы: Структурное подтипирование (статическая утиная типизация)» .
  9. ^ «StackOverflow: реализовать утиную типизацию с помощью Java MethodHandles» . Проверено 13 июня 2020 г.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: D8163E1CC1AE7149F6BEA5D882A74789__1718660040
URL1:https://en.wikipedia.org/wiki/Duck_typing
Заголовок, (Title) документа по адресу, URL1:
Duck typing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)