Рубрики
Без рубрики

Введение в стипецию утки в Python

Утиная набравка – чрезвычайно полезный стиль программирования, который действительно делает Python Awesome. Это позволяет нам … Помечено Python, программирование, учебное пособие.

Утиная набравка – чрезвычайно полезный стиль программирования, который действительно делает Python Awesome. Он позволяет нам «игнорировать» тип объекта и, скорее проверить, содержит ли объект функции или нет.

Отлично упоминается в Документация Python так как:

” Если это выглядит как утка и кряки, как утка, это должна быть утка »

Если кодовая база хорошо определена, это обеспечивает гибкость, позволяя полиморфную замену. Это позволяет нам избежать таких вещей Тип () и Isinstance () Отказ

Давайте рассмотрим этот пример. Мы создаем два класса, утки и восьмиката. Потому что восьмикат потрясающий, давайте предположим, что он способен к доставке.

class Duck:
  def quack(self):
    print("Quack, Quack")

class Octocat:
  def meow(self):
    print("Github is awesome")
  def quack(self):
    print("Quack, Quack")

Теперь давайте создадим функцию make_it_quack () Давайте предположим, что мы не знаем о наборе утки, и нам нужно написать функцию, которая проверяет ли объект, который мы передаем в функцию типа Утка И если мы вызываем Квалак () функция

def make_it_quack(object):
  if isinstance(object, Duck):
    object.quack()
  else:
    print("Only duck's can quack")

Если мы пройдем объект утки (скажи D ) наш выход будет:

make_it_quack(d)
>>> Quack, Quack

Если мы пройдем объект OctOCAT (скажем, o ) Наш выход будет:

make_it_quick(o)
>>> Only duck's can quack

В пакете могут быть тонны и тонны объектов, мы не можем набрать проверку на каждый возможный тип объекта (но это то, что люди будут делать, когда Python не существует !!), мы можем просто сделать следующее:

def make_it_quack(object):
  object.quack()

make_it_quack(o)

>>> Quack, Quack

Это сущность Утка, набрав Отказ

Смотри, прежде чем прыгать (lbyl) : Это стиль кодирования, который явные проверки для предварительных условий перед вызовом или поисками. Это характеризуется наличием многих Если заявления.

Легче попросить прощения, чем разрешение : Это обычный стиль кодирования Python, который просто предполагает существование действительных ключей/атрибутов и только уловит исключения, если эти предположения оказываются ложными. Это делает код намного чище и обычно характеризуется наличием попробуйте и кроме заявления.

Давайте предположим, что мы анализируем некоторые метаданные Словарь и нам нужно извлечь конкретное значение ключа

Lbyl путь

metadata = {"day": "Monday", 
            "month": "December", 
            "visited":True
           }
if "day" in metadata and "month" in metadata and "visited" in metadata:
  visit = metadata["day"]
else:
  print("Missing key")

WAFP путь

try:
    visit = metadata["visited"]
except KeyError as e:
    print("{} not found".format(e))

Это довольно интуитивно понятно, почему EAFP лучше, чем подход LBYL.

Оригинал: “https://dev.to/sauravmaheshkar/introduction-to-duck-typing-in-python-5585”