Duck typing

In computer programming, duck typing is an application of the duck test—"If it walks like a duck and it quacks like a duck, then it must be a duck"—to determine whether an object can be used for a particular purpose. With nominative typing, an object is of a given type if it is declared as such (or if a type's association with the object is inferred through mechanisms such as object inheritance). With duck typing, an object is of a given type if it has all methods and properties required by that type.[1][2] Duck typing may be viewed as a usage-based structural equivalence between a given object and the requirements of a type.

Example

This simple example in Python 3 demonstrates how any object may be used in any context until it is used in a way that it does not support.

class Duck:
    def swim(self):
        print("Duck swimming")

    def fly(self):
        print("Duck flying")

class Whale:
    def swim(self):
        print("Whale swimming")

for animal in [Duck(), Whale()]:
    animal.swim()
    animal.fly()

Output:

Duck swimming
Duck flying
Whale swimming
AttributeError: 'Whale' object has no attribute 'fly'

If it can be assumed that anything that can swim is a duck because ducks can swim, a whale could be considered a duck; however, if it is also assumed that a duck must be capable of flying, the whale will not be considered a duck.

In statically typed languages

In some statically typed languages such as Boo[3] and D,[4][5] class type checking can be specified to occur at runtime rather than at compile time.

Comparison with other type systems

Structural type systems

Duck typing is similar to, but distinct from, structural typing. Structural typing is a static typing system that determines type compatibility and equivalence by a type's structure, whereas duck typing is dynamic and determines type compatibility by only that part of a type's structure that is accessed during runtime.

The TypeScript,[6] Elm[7] and Python[8] languages support structural typing to varying degrees.

Protocols and interfaces

Protocols and interfaces provide a way to explicitly declare that some methods, operators or behaviors must be defined. If a third-party library implements a class that cannot be modified, a client cannot use an instance of it with an interface unknown to that library even if the class satisfies the interface requirements. A common solution to this problem is the adapter pattern. In contrast, with duck typing, the object would be accepted directly without the need for an adapter.

Templates or generic types

Template (also called generic) functions or methods apply the duck test in a static typing context; this brings all of the advantages and disadvantages of static versus dynamic type checking. Duck typing can also be more flexible in that only the methods actually called at runtime must be implemented, while templates require implementations of all methods that cannot be proven unreachable at compile time.

In languages such as Java, Scala and Objective-C, reflection may be employed to inspect whether objects implement methods or add necessary methods at runtime. For example, Java's MethodHandle API can be used in this manner.[9]

See also

References

  1. ^ "Glossary — Python 3.7.1 documentation". docs.python.org. Retrieved 2018-11-08.
  2. ^ "Python Duck Typing - Example". Techie Hours. 2020-06-28. Archived from the original on 2022-03-31. Retrieved 2020-07-26.
  3. ^ Boo: Duck TypingArchived October 6, 2008, at the Wayback Machine
  4. ^ "Dynamic classes and duck typing".
  5. ^ "Metaprogramming - duck typing in D".
  6. ^ "SE Radio Episode 384: Boris Cherny on TypeScript". se-radio.net. Retrieved 2019-10-25.
  7. ^ Czaplicki, Evan. "Core Language · An Introduction to Elm". Retrieved 30 January 2017.
  8. ^ "PEP 544 – Protocols: Structural subtyping (static duck typing)".
  9. ^ "StackOverflow: Implement duck typing using java MethodHandles". Retrieved 13 June 2020.

Read other articles:

Television series MTV2's Guy Code redirects here. For the spinoff, see Girl Code. Guy CodeGenreRealityCreated byRyan LingDirected byAndrew StuckeyCountry of originUnited StatesOriginal languageEnglishNo. of seasons5No. of episodes63ProductionExecutive producers Darin Byrne Paul Ricci Ryan Ling Running time20 to 23 minutesProduction companyViacom Media NetworksOriginal releaseNetworkMTV2ReleaseNovember 15, 2011 (2011-11-15) –March 26, 2015 (2015-03-26)RelatedGirl CodeGuy Court...

 

Australian sketch comedy television series For the Austrian TV series of the same name, see Fast Forward (Austrian TV series). Fast ForwardGenreSketch comedyCreated bySteve VizardWritten byAndrew KnightSteve VizardDirected byTed EmeryStarringGeoff BrooksJane TurnerMagda SzubanskiMarg DowneyMichael VeitchPeter MoonSteve BlackburnErnie Dingo (1989)Steve Vizard (1989–91)Bryan Dawe (1990)Alan Pentland (1990–92, recurring previously)Gina Riley (1990–92)Brendan Luno (1991, recurring previousl...

 

Italian opera singer Mina LeonesiMina Leonesi c. 1914Bornc. 1890Rivoli, ItalyDiedc. 1930 (aged 39–40)Lombardy, ItalyOccupationOpera Singer & Actress Guglielmina 'Mina' Leonesi (c. 1890 – c. 1930) was an Italian opera singer and actress, active in the early 20th century. Mina was born to a middle-class family in Rivoli, Italy c.1890. Though predominantly based in Milan and appearing in productions staged at La Scala, Mina also travelled internationally with her work, inc...

American actor (born 1940) Pacino redirects here. For the medieval Italian painter, see Pacino di Buonaguida. For the American football player, see Pacino Horne. Al PacinoPacino in 2016BornAlfredo James Pacino (1940-04-25) April 25, 1940 (age 83)New York City, U.S.Alma materActors StudioHB StudioOccupationActorYears active1967–presentWorksFull listPartner(s)Beverly D'Angelo (1997–2003)Lucila Polak (2008–2018)Children4AwardsFull list This article is part of a series aboutA...

 

Pour les articles homonymes, voir Saint-Gingolph (homonymie). Saint-Gingolph Vue aérienne de Saint-Gingolph, la partie suisse est au premier plan, la partie française au deuxième plan. Blason Administration Pays France Région Auvergne-Rhône-Alpes Département Haute-Savoie Arrondissement Thonon-les-Bains Intercommunalité Communauté de communes Pays d'Évian Vallée d'Abondance Maire Mandat Géraldine Pflieger 2020-2026 Code postal 74500 Code commune 74237 Démographie Gentilé Gingolai...

 

Questa voce sull'argomento cestisti statunitensi è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Brandon McCoy McCoy in azione al McDonald's All-American Game del 2017. Nazionalità  Stati Uniti Altezza 213 cm Peso 113 kg Pallacanestro Ruolo Centro Squadra  S. Falls Skyforce Carriera Giovanili Morse High SchoolCathedral Catholic High School2017-2018 UNLV R. Rebels Squadre di club 2018-20...

Joy DenalaneBiographieNaissance 11 juin 1973 (50 ans)BerlinNom de naissance Joy Maureen DenalaneNationalité allemandeActivités Chanteuse, auteure-compositricePériode d'activité depuis 1999Autres informationsLabel Four MusicGenres artistiques Soul, crossover jazz (en)Site web www.joydenalane.comDiscographie Discographie de Joy Denalane (en)modifier - modifier le code - modifier Wikidata Joy Denalane (Berlin-Ouest, 11 juin 1973) est une chanteuse allemande. Biographie Cette section est...

 

Не следует путать с мужским освободительным движением. Индия, 2014 год, митинг с лозунгом «Права мужчин — права человека» Движение за права мужчин (англ. men's rights movement, MRM) — часть мужского движения, активисты которой отрицают феминизм и взамен фокусируют внимание ...

 

American multinational beverage corporation The Coca-Cola CompanyCoca-Cola headquarters in AtlantaCompany typePublicTraded asNYSE: KODJIA componentS&P 100 componentS&P 500 componentISINUS1912161007IndustryBeverageFoundedJanuary 29, 1892; 132 years ago (1892-01-29), in Atlanta, Georgia, U.S.FounderAsa Griggs CandlerHeadquartersAtlanta, Georgia, U.S.Area servedWorldwideKey peopleJames Quincey (chairman & CEO)John Murphy (president & CFO)BrandsList of Coca-...

American professional wrestler Robert GibsonGibson in 2013Birth nameRuben GibsonBorn (1958-07-19) July 19, 1958 (age 65)Pensacola, Florida, U.S.Professional wrestling careerRing name(s)Robert Fuller Jr.Robert GibsonBilled height5 ft 11 in (180 cm)[1]Billed weight224 lb (102 kg)[1]Trained byRick GibsonDebut1977 Robert Gibson (born Ruben Gibson, July 19, 1958) is an American professional wrestler. He is best known as one half of the tag team known a...

 

Cet article dresse la liste des présidents de la république du Pérou par ordre chronologique depuis le 28 juillet 1821. État du Pérou (1821-1822) Portrait Protecteur Début mandat Fin mandat José de San Martín(1778-1850) 28 juillet 1821 20 septembre 1822 République péruvienne (1822-1836) Portrait Président Début mandat Fin mandat Francisco Xavier de Luna Pizarro(1780-1855) 20 septembre 1822 22 septembre 1822 José de La Mar(1778-1830) 22 septembre 1822 27 février 1823 José de la ...

 

Questa pagina sull'argomento linguistica sembra trattare argomenti unificabili alla pagina Dialetto brianzolo. Puoi contribuire unendo i contenuti in una pagina unica. Segui i suggerimenti del progetto di riferimento. MonzeseMonsciàtParlato inItalia RegioniLombardiaProvincia di Monza e della BrianzaMonza LocutoriTotale~100.000 ClassificaNon in top 100 TassonomiaFilogenesiIndoeuropee Italiche  Romanze   Galloromanze    Galloitaliche ...

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ne cite pas suffisamment ses sources (novembre 2016). Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ». En pratique : Quelles sources sont attendues ? ...

 

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (نوفمبر 2019) الدوري الأوروغواياني لكرة القدم 2016 تفاصيل الموسم الدوري الأوروغواياني الممتاز  النسخة 113  البلد ال�...

 

Mid-ocean ridge in the South Atlantic between the South American Plate and the Antarctic Plate Bathymetric map of the South American-Antarctic Ridge The South American–Antarctic Ridge or simply American-Antarctic Ridge (SAAR or AAR) (in Spanish: Dorsal Antártico-Americana) is the tectonic spreading center between the South American Plate and the Antarctic Plate. It runs along the sea-floor from the Bouvet Triple Junction in the South Atlantic Ocean south-westward to a major transform fault...

Brannan & The Embarcadero Muni Metro trains at Brannan & The Embarcadero station in May 2012General informationLocationThe Embarcadero at Brannan StreetSan Francisco, CaliforniaCoordinates37°47′3.72″N 122°23′17.33″W / 37.7843667°N 122.3881472°W / 37.7843667; -122.3881472Line(s)Muni Metro ExtensionPlatforms1 high level island platform2 low level side platformsTracks2ConstructionAccessibleYesHistoryOpenedJanuary 10, 1998[1][2]Ser...

 

108th Air Refueling Squadron108th Air Refueling Squadron – Boeing KC-135A-BN Stratotanker 59-1487 being prepared to go on permanent static display in 1976 SAC liveryActive27 August 1917 – presentCountry United StatesAllegiance IllinoisBranch Air National GuardRoleAir RefuelingSizeSquadronPart ofIllinois Air National GuardGarrison/HQScott Air Force Base, Belleville, IllinoisNickname(s)Mid America MilitiaTail CodeWhite tail stripe Illinois in blue lettersCommandersLt ColStev...

 

Имясла́вие (у критиков распространено наименование имябо́жничество, в синодальных документах — имябо́жие, также называемое ономатодокси́я, греч. ονοματοδοξία) — религиозное догматическое и мистическое движение, получившее распространение в начале XX века сре�...

Historical development of LondonThis article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: History of London – news · newspapers · books · scholar · JSTOR (March 2024) (Learn how and when to remove this message) Part of a series on the History of London Roman London Anglo-Saxon London Norman and Medieval London Tudor L...

 

РСДРП — РСДРП(б) — РКП(б) —ВКП(б) — КПССИстория партии Октябрьская революция (1917) Военный коммунизм (1918—1921) Новая экономическая политика (1921—1928) Ленинский призыв (1924) Внутрипартийная борьба (1926—1933) Сталинизм (1933—1953) Хрущёвская оттепель (1953—1964) Период застоя (1964—1985) Перес...