logo

Wat is duck-typen in Python?

In deze tutorial leren we over duck-typen. Het is een populaire term in Python, en komt voort uit de uitspraak: 'Als het loopt als een eend, zwemt als een eend, eruit ziet als een eend, dan zou het waarschijnlijk een eend moeten zijn.'

De bovenstaande verklaring geeft een idee om een ​​eend te identificeren. Hier hebben we geen genomische sequentie van de eend nodig. We trekken onze conclusie op basis van zijn gedrag en uiterlijke verschijning.

We zullen bespreken wat precies de betekenis is van duck-typering in het programmeren in Python.

Python volgt de EAFP (Gemakkelijker om vergeving te vragen dan toestemming) in plaats van de LBLY (Kijk voordat je springt) filosofie. Het EAFP is enigszins gekoppeld aan de 'duck-typering'-stijl.

Dynamisch versus statisch typen

De belangrijkste reden voor het gebruik van duck-typering is het bieden van ondersteuning voor dynamisch typen Python-programmering . In Python hoeven we het gegevenstype van de variabele niet te specificeren en kunnen we de verschillende gegevenstypewaarden in verdere code opnieuw toewijzen aan dezelfde variabele. Laten we het volgende voorbeeld bekijken.

Voorbeeld -

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

Uitgang:

shilpa shetty
 

Zoals we in de bovenstaande code kunnen zien, hebben we een geheel getal toegewezen aan een variabele x, waardoor deze de int type. Vervolgens hebben we een string en een lijst aan dezelfde variabele toegewezen. Python-interpreter accepteert de wijzigingen van gegevenstypen van dezelfde variabele. Dit is dynamisch typegedrag.

Veel andere programmeertalen, zoals Java, Swift zijn van het statische type. We moeten variabelen declareren met de gegevenstypen. In het onderstaande voorbeeld proberen we hetzelfde te doen met Swift in plaats van Python.

Voorbeeld -

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

Bovenstaande code kan niet worden gecompileerd, omdat we geen string in de Swift-taal konden toewijzen. Omdat variabel A werd gedeclareerd als een geheel getal.

omgekeerde tekenreeks java

Concept van eend typen

Eerder hebben we besproken dat Python een dynamisch getypeerde taal is. We kunnen echter de dynamische aanpak gebruiken met aangepaste gegevenstypen. Laten we het volgende voorbeeld begrijpen.

Voorbeeld -

 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) 

Uitgang:

 Compiling Running Spell Check Convention Check 

In de bovenstaande code hebben we een Visuele studio klasse die moet uitvoeren() methode. In de desktopklasse hebben we de ide als argument in de code() doorgegeven. Een het gaat is een voorwerp van Visuele studio klas. Met de hulp van ide hebben we de uitvoeren() methode van de VisualStudio-klasse.

Laten we nog een voorbeeld bekijken.

Python converteert bytes naar string

Voorbeeld - 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()) 

Uitgang:

 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' 

In de bovenstaande code wordt de instantie van de klasse Duck weerspiegeld door aanroep de duck_testing functie. Het gebeurt ook met de Sparrow-klasse, die de zwemmen() functie. Maar in het geval van de Crocodile-klasse mislukt de evaluatie van de eendtest omdat deze de zwemmen() functie.

Hoe duck-typering EAFP ondersteunt

Het typen van eend is de meest geschikte stijl voor het EAFP, omdat we ons niet hoeven te concentreren op de 'type' van het voorwerp. Wij hoeven er alleen voor te zorgen gedrag En vermogen . Laten we de volgende uitspraken eens bekijken.

Als we veel if-else-blokken zien, dan is het een LBYL-coderingsstijl.

Maar als we veel try-except-blokken zien, dan is het waarschijnlijk een EAFP-codeur.