logo

Co to jest pisanie kaczką w Pythonie?

W tym samouczku nauczymy się pisać na klawiaturze kaczej. Jest to popularny termin w Pythonie i pochodzi od powiedzenia: „Jeśli chodzi jak kaczka, pływa jak kaczka i wygląda jak kaczka, to prawdopodobnie powinna być kaczką”.

Powyższe stwierdzenie daje pomysł na identyfikację kaczki. Tutaj nie potrzebujemy sekwencji genomowej kaczki. Wnioski wyciągamy na podstawie jego zachowania i wyglądu zewnętrznego.

Omówimy, co dokładnie oznacza „kaczkowe” pisanie w programowaniu w Pythonie.

Python podąża za EAFP (Łatwiej poprosić o przebaczenie niż o pozwolenie) zamiast LBLY Filozofia (Popatrz, zanim skoczysz). EAFP jest w pewnym stopniu powiązany ze stylem „kaczego pisania”.

Pisanie dynamiczne i statyczne

Głównym powodem używania typu kaczego jest zapewnienie obsługi dynamicznego pisania Programowanie w Pythonie . W Pythonie nie musimy określać typu danych zmiennej i możemy ponownie przypisać wartości różnych typów danych do tej samej zmiennej w dalszym kodzie. Zobaczmy następujący przykład.

Przykład -

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

Wyjście:

uczyń skrypt sh wykonywalnym
 

Jak widać w powyższym kodzie, przypisaliśmy liczbę całkowitą do zmiennej x, tworząc ją z wew typ. Następnie przypisaliśmy ciąg znaków i listę do tej samej zmiennej. Interpreter Pythona akceptuje zmiany typów danych tej samej zmiennej. Jest to zachowanie podczas pisania dynamicznego.

Wiele innych języków programowania, takich jak Java, Swift, jest typem statycznym. Musimy zadeklarować zmienną z typami danych. W poniższym przykładzie próbujemy zrobić to samo, używając Swifta zamiast Pythona.

Przykład -

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

Powyższy kod nie może zostać skompilowany, ponieważ nie mogliśmy przypisać ciągu znaków w języku Swift. Ponieważ zmienna A została zadeklarowana jako liczba całkowita.

rodzaje drzew binarnych

Koncepcja pisania kaczego

Wcześniej omawialiśmy, że Python jest językiem z dynamicznym typowaniem. Możemy jednak zastosować podejście dynamiczne w przypadku niestandardowych typów danych. Rozumiemy następujący przykład.

Przykład -

 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) 

Wyjście:

 Compiling Running Spell Check Convention Check 

W powyższym kodzie utworzyliśmy plik VisualStudio klasa, która musi wykonać() metoda. W klasie desktop przekazaliśmy ide jako argument w funkcji code(). Jakiś to idzie jest przedmiotem VisualStudio klasa. Za pomocą ide zadzwoniliśmy do wykonać() metoda klasy VisualStudio.

Zobaczmy inny przykład.

wiek Salmana Khana

Przykład - 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()) 

Wyjście:

 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' 

W powyższym kodzie instancja klasy Duck jest odzwierciedlana przez wywołanie test_kaczki funkcjonować. Dzieje się tak również w przypadku klasy Sparrow, która implementuje metodę pływać() funkcjonować. Jednak w przypadku klasy Crocodile nie przechodzi ona oceny testów kaczych, ponieważ nie implementuje metody pływać() funkcjonować.

Jak pisanie kaczek wspiera EAFP

Pisanie kaczkowe jest najodpowiedniejszym stylem dla EAFP, ponieważ nie musimy skupiać się na 'typ' obiektu. Musimy tylko o nie zadbać zachowanie I zdolność . Zobaczmy następujące stwierdzenia.

Kiedy widzimy wiele bloków if-else, jest to styl kodowania LBYL.

Ale jeśli widzimy wiele bloków try-except, to najprawdopodobniej jest to koder EAFP.