U ovom vodiču ćemo naučiti o tipkanju pataka. To je popularan izraz u Pythonu, a dolazi od riječi, 'Ako hoda kao patka, pliva kao patka, izgleda kao patka, onda bi vjerojatno trebala biti patka.'
Gornja izjava daje ideju za prepoznavanje patke. Ovdje ne trebamo imati genomsku sekvencu patke. Zaključujemo po ponašanju i vanjskom izgledu.
Raspravljat ćemo o tome što točno znači tipkanje patke u programiranju u Pythonu.
Python slijedi EAFP (Lakše tražiti oprost nego dopuštenje) nego LBLY (Pogledaj prije nego što skočiš) filozofija. EAFP je donekle povezan sa stilom 'duck typing'.
Dinamičko naspram statičkog tipkanja
Glavni razlog za korištenje duck tipkanja je pružanje podrške za dinamičko tipkanje Python programiranje . U Pythonu ne trebamo navesti tip podataka varijable i možemo ponovno dodijeliti različite vrijednosti tipa podataka istoj varijabli u daljnjem kodu. Pogledajmo sljedeći primjer.
Primjer -
x = 12000 print(type(x)) x = 'Dynamic Typing' print(type(x)) x = [1, 2, 3, 4] print(type(x))
Izlaz:
nepromjenjivi popis
Kao što možemo vidjeti u gornjem kodu, dodijelili smo cijeli broj varijabli x, čineći je od int tip. Zatim smo istoj varijabli dodijelili string i listu. Python interpreter prihvaća promjene tipova podataka iste varijable. Ovo je dinamično ponašanje pri tipkanju.
Mnogi drugi programski jezici kao što su Java, swift su statične vrste. Moramo deklarirati varijablu s tipovima podataka. U donjem primjeru pokušavamo učiniti istu stvar koristeći Swift umjesto Pythona.
Primjer -
# integer value assigning in JavaScript var a = 10 # Assinging string in swift a = 'Swift language'
Gornji kod se ne može kompajlirati jer nismo mogli dodijeliti niz u Swift jeziku. Jer promjenjiva a je deklariran kao cijeli broj.
java struktura
Koncept Duck Typinga
Ranije smo govorili da je Python dinamički tipizirani jezik. Međutim, možemo koristiti dinamički pristup s prilagođenim tipovima podataka. Razumimo sljedeći primjer.
Primjer -
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)
Izlaz:
Compiling Running Spell Check Convention Check
U gornjem kodu stvorili smo a Vizualni studio klasa koja mora izvršiti() metoda. U desktop-klasi, proslijedili smo ide kao argument u kodu(). An to ide je objekt Vizualni studio razreda. Uz pomoć ide, pozvali smo izvršiti() metoda VisualStudio klase.
powershell veći ili jednak
Pogledajmo još jedan primjer.
Primjer - 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())
Izlaz:
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'
U gornjem kodu, instanca klase Duck odražava se pozivom patka_testiranje funkcija. To se također događa s klasom Sparrow, koja implementira plivati() funkcija. Ali u slučaju klase Crocodile, ona ne prolazi evaluaciju testiranja patke jer ne implementira plivati() funkcija.
Kako patkasto tipkanje podržava EAFP
Patčje tipkanje je najprikladniji stil za EAFP jer se ne trebamo fokusirati na 'tip' objekta. Samo se trebamo pobrinuti za njega ponašanje i sposobnost . Pogledajmo sljedeće izjave.
Kada vidimo puno if-else blokova, onda je to LBYL stil kodiranja.
Ali ako vidimo puno blokova pokušaj-osim, onda je to vjerojatno EAFP koder.