logo

Vad är duck typing i Python?

I den här handledningen kommer vi att lära oss om att skriva anka. Det är en populär term i Python, och den kommer från att säga, 'Om den går som en anka, simmar som en anka, ser ut som en anka, då borde det förmodligen vara en anka.'

Ovanstående uttalande ger en idé om att identifiera en anka. Här behöver vi inte ha en genomisk sekvens av ankan. Vi drar vår slutsats av dess beteende och yttre utseende.

Vi kommer att diskutera exakt vad som menas med ducktyping i Python-programmering.

Python följer EAFP (Lättare att be om förlåtelse än tillåtelse) snarare än LBLY (Look Before You Leap) filosofi. EAFP är något kopplat till stilen 'anka att skriva'.

Dynamisk kontra statisk typning

Det främsta skälet till att använda duck typing är att ge stöd för dynamisk inskrivning Python programmering . I Python behöver vi inte specificera variabelns datatyp och vi kan omtilldela de olika datatypvärdena till samma variabel i ytterligare kod. Låt oss se följande exempel.

Exempel -

 x = 12000 print(type(x)) x = 'Dynamic Typing' print(type(x)) x = [1, 2, 3, 4] print(type(x)) 

Produktion:

java är tom
 

Som vi kan se i ovanstående kod tilldelade vi ett heltal till en variabel x, vilket gör det till int typ. Sedan tilldelade vi en sträng och en lista till samma variabel. Python-tolken accepterar ändringar av datatyper för samma variabel. Detta är ett dynamiskt skrivbeteende.

Många andra programmeringsspråk som Java, swift är den statiska typen. Vi måste deklarera variabel med datatyperna. I exemplet nedan försöker vi göra samma sak med Swift istället för Python.

Exempel -

 # integer value assigning in JavaScript var a = 10 # Assinging string in swift a = 'Swift language' 

Ovanstående kod kan inte kompileras eftersom vi inte kunde tilldela en sträng på Swift-språket. Eftersom variabel a deklarerades som ett heltal.

värd för linux

Begreppet Anka att skriva

Tidigare har vi diskuterat att Python är ett dynamiskt maskinskrivet språk. Däremot kan vi använda det dynamiska tillvägagångssättet med anpassade datatyper. Låt oss förstå följande exempel.

Exempel -

 class VisualStudio: def execute(self): print('Compiling') print('Running') print('Spell Check') print('Convention Check') class Desktop: def code(self, ide): ide.execute() ide = VisualStudio() desk = Desktop() desk.code(ide) 

Produktion:

 Compiling Running Spell Check Convention Check 

I ovanstående kod har vi skapat en Visuell Studio klass som måste Kör() metod. I desktop-klassen har vi skickat iden som ett argument i koden(). En det går är ett föremål för Visuell Studio klass. Med hjälp av ide ringde vi till Kör() metod för VisualStudio-klassen.

Låt oss se ett annat exempel.

Exempel - 2

 class Duck: def swim(self): print('I'm a duck, and I can swim.') class Sparrow: def swim(self): print('I'm a sparrow, and I can swim.') class Crocodile: def swim_walk(self): print('I'm a Crocodile, and I can swim, but not quack.') def duck_testing(animal): animal.swim() duck_testing(Duck()) duck_testing(Sparrow()) duck_testing(Crocodile()) 

Produktion:

 I'm a duck, and I can swim. I'm a sparrow, and I can swim. Traceback (most recent call last): File '', line 24, in File '', line 19, in duck_testing AttributeError: 'Crocodile' object has no attribute 'swim' 

I ovanstående kod återspeglas Duck-klassens instans genom att anropa anka_testningen fungera. Det händer också med Sparrow-klassen, som implementerar simma() fungera. Men när det gäller Crocodile-klassen, misslyckas den med utvärderingen av anktestningen eftersom den inte implementerar simma() fungera.

Hur ducktyping stöder EAFP

Ankan att skriva är den mest lämpliga stilen för EAFP eftersom vi inte behöver fokusera på 'typ' av objektet. Vi behöver bara ta hand om den beteende och förmåga . Låt oss se följande uttalanden.

hur många miljoner är det i en miljard

När vi ser många if-else-block är det en LBYL-kodningsstil.

Men om vi ser många försök-utom-block, så är det en sannolikhet en EAFP-kodare.