logo

Какво е патешко писане в Python?

В този урок ще научим за патешкото писане. Това е популярен термин в Python и идва от казването, „Ако ходи като патица, плува като патица, изглежда като патица, тогава вероятно трябва да е патица.“

Горното твърдение дава идея за идентифициране на патица. Тук не е необходимо да имаме геномна последователност на патицата. Правим извода си по поведението и външния му вид.

Ще обсъдим какво точно означава патешко писане в програмирането на Python.

Python следва EAFP (По-лесно е да поискате прошка, отколкото разрешение), отколкото LBLY (Погледни преди да скочиш) философия. EAFP е донякъде свързан със стила на „патешко писане“.

Динамично срещу статично въвеждане

Основната причина за използването на патешко въвеждане е да се осигури поддръжка за динамично въвеждане Програмиране на Python . В Python не е необходимо да указваме типа данни на променливата и можем да присвоим отново различните стойности на типа данни на същата променлива в допълнителен код. Да видим следния пример.

пример -

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

Изход:

unsigned int c програмиране
 

Както можем да видим в горния код, присвоихме цяло число на променлива x, правейки я от вътр Тип. След това присвоихме низ и списък на една и съща променлива. Интерпретаторът на Python приема промените на типовете данни на една и съща променлива. Това е динамично поведение при писане.

Много други езици за програмиране като Java, swift са от статичен тип. Трябва да декларираме променлива с типовете данни. В примера по-долу се опитваме да направим същото, като използваме Swift вместо Python.

пример -

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

Горният код не може да бъде компилиран, защото не можахме да присвоим низ на езика Swift. Тъй като променлива а беше декларирано като цяло число.

низ в char java

Концепция за Duck Typing

По-рано обсъдихме, че Python е динамичен въведен език. Въпреки това можем да използваме динамичния подход с персонализирани типове данни. Нека разберем следния пример.

пример -

 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) 

Изход:

 Compiling Running Spell Check Convention Check 

В горния код създадохме a Визуално студио клас, който трябва изпълни() метод. В десктоп-класа сме предали ide като аргумент в кода(). Ан става е обект на Визуално студио клас. С помощта на ide извикахме изпълни() метод на клас VisualStudio.

изберете от множество таблици в sql

Да видим друг пример.

Пример - 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()) 

Изход:

 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' 

В горния код екземплярът на класа Duck се отразява чрез извикване duck_testing функция. Това се случва и с класа Sparrow, който имплементира плувам () функция. Но в случая на класа Crocodile, той се проваля при оценката на тестването на патица, защото не прилага плувам () функция.

Как патешкото писане поддържа EAFP

Типичното въвеждане е най-подходящият стил за EAFP, защото не е нужно да се фокусираме върху 'Тип' на обекта. Трябва само да се погрижим за него поведение и способност . Нека да видим следните твърдения.

Когато виждаме много блокове if-else, това е стил на кодиране LBYL.

Но ако видим много блокове с изключение на опита, тогава е вероятно EAFP кодер.