logo

Co je psaní kachny v Pythonu?

V tomto tutoriálu se naučíme o psaní kachny. Je to populární termín v Pythonu a pochází z výroku, 'Pokud chodí jako kachna, plave jako kachna, vypadá jako kachna, pak by to pravděpodobně měla být kachna.'

Výše uvedené tvrzení dává nápad identifikovat kachnu. Zde nepotřebujeme mít genomickou sekvenci kachny. Z jeho chování a vnějšího vzhledu vyvozujeme závěr.

Probereme, co přesně znamená psaní kachny v programování v Pythonu.

Python následuje EAFP (Snazší požádat o odpuštění než povolení) spíše než LBLY (Podívejte se, než skočíte) filozofie. EAFP je do jisté míry spojen se stylem „kachního psaní“.

Dynamické vs. statické typování

Hlavním důvodem používání kachního psaní je podpora dynamického psaní Programování v Pythonu . V Pythonu nepotřebujeme specifikovat datový typ proměnné a můžeme v dalším kódu přiřadit různé hodnoty datových typů stejné proměnné. Podívejme se na následující příklad.

Příklad -

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

Výstup:

plná forma pvr
 

Jak můžeme vidět ve výše uvedeném kódu, přiřadili jsme celé číslo proměnné x, čímž jsme ji vytvořili int typ. Poté jsme stejné proměnné přiřadili řetězec a seznam. Python interpret přijímá změny datových typů stejné proměnné. Toto je chování dynamického psaní.

Mnoho dalších programovacích jazyků, jako je Java, swift, je statického typu. Musíme deklarovat proměnnou s datovými typy. V níže uvedeném příkladu se snažíme udělat totéž pomocí Swift místo Pythonu.

Příklad -

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

Výše uvedený kód nelze zkompilovat, protože jsme nemohli přiřadit řetězec v jazyce Swift. Protože variabilní A byl deklarován jako celé číslo.

java převést char na int

Koncept psaní kachny

Již dříve jsme diskutovali o tom, že Python je dynamický typovaný jazyk. Můžeme však použít dynamický přístup s vlastními datovými typy. Pojďme pochopit následující příklad.

Příklad -

 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) 

Výstup:

 Compiling Running Spell Check Convention Check 

Ve výše uvedeném kódu jsme vytvořili a Vizuální studio třída, která musí vykonat() metoda. Ve třídě desktop jsme předali ide jako argument v kódu (). An jde je předmětem Vizuální studio třída. S pomocí ide jsme zavolali vykonat() metoda třídy VisualStudio.

návratové pole java

Podívejme se na další příklad.

Příklad - 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()) 

Výstup:

 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' 

Ve výše uvedeném kódu se instance třídy Duck odráží voláním kachní_testování funkce. Stává se to také u třídy Sparrow, která implementuje plavat() funkce. Ale v případě třídy Crocodile selže v hodnocení kachního testování, protože neimplementuje plavat() funkce.

Jak psaní kachen podporuje EAFP

Kachní psaní je nejvhodnější styl pro EAFP, protože se na něj nemusíme soustředit 'typ' objektu. Jen se o něj musíme postarat chování a schopnost . Podívejme se na následující prohlášení.

Když vidíme mnoho bloků if-else, pak je to styl kódování LBYL.

Ale pokud vidíme spoustu try-kromě bloků, pak je to pravděpodobně kodér EAFP.