У цьому підручнику ми дізнаємося про качиний тип. Це популярний термін у Python, і він походить від слів: «Якщо він ходить як качка, плаває як качка, виглядає як качка, то, ймовірно, це має бути качка».
Наведене вище твердження дає ідею ідентифікації качки. Тут нам не потрібна геномна послідовність качки. Ми робимо висновок за його поведінкою та зовнішнім виглядом.
Ми обговоримо, що саме означає качиний набір тексту в програмуванні на Python.
Python слідує за EAFP (Легше просити вибачення, ніж дозволу), а не LBLY (Look Before You Leap) філософія. EAFP дещо пов’язаний зі стилем «качиного друку».
Динамічний і статичний тип
Основною причиною використання качиного введення є забезпечення підтримки динамічного введення Програмування на Python . У Python нам не потрібно вказувати тип даних змінної, і ми можемо перепризначити значення різних типів даних одній змінній у подальшому коді. Розглянемо наступний приклад.
приклад -
x = 12000 print(type(x)) x = 'Dynamic Typing' print(type(x)) x = [1, 2, 3, 4] print(type(x))
Вихід:
зробити сценарій sh виконуваним
Як ми можемо бачити в наведеному вище коді, ми присвоїли ціле число змінній x, зробивши її внутр типу. Потім ми призначили рядок і список одній змінній. Інтерпретатор Python приймає зміни типів даних однієї і тієї ж змінної. Це динамічна поведінка набору тексту.
Багато інших мов програмування, наприклад Java, swift, є статичними. Нам потрібно оголосити змінну з типами даних. У наведеному нижче прикладі ми намагаємося зробити те саме, використовуючи Swift замість Python.
приклад -
# integer value assigning in JavaScript var a = 10 # Assinging string in swift a = 'Swift language'
Наведений вище код неможливо скомпілювати, оскільки ми не змогли призначити рядок мовою Swift. Тому що змінна a було оголошено як ціле число.
рядок до об’єкта json
Концепція 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 VisualStudio клас, який повинен виконати() метод. У настільному класі ми передали ide як аргумент у code(). Ан це йде є об'єктом VisualStudio клас. За допомогою ide ми викликали виконати() метод класу VisualStudio.
Давайте подивимося інший приклад.
Приклад - 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 відображається викликом качине_тестування функція. Це також відбувається з класом Sparrow, який реалізує плавати() функція. Але у випадку з класом Crocodile він не проходить тестування duck, оскільки не реалізує плавати() функція.
Як качиний набір підтримує EAFP
Качиний набір є найбільш відповідним стилем для EAFP, оскільки нам не потрібно зосереджуватися на тип об'єкта. Нам залишається лише подбати про нього поведінка і здатність . Давайте подивимося на наступні твердження.
вік вікі каушал
Коли ми бачимо багато блоків if-else, це означає, що це стиль кодування LBYL.
Але якщо ми бачимо багато блоків try-except, то, ймовірно, це кодер EAFP.