В този урок ще научим за патешкото писане. Това е популярен термин в 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 кодер.