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

Duck typing | Утиная типизация в Python

Утка, набрав – это вариация динамического программирования и использует форму потратного рассуждения для проверки типа. В этой статье мы сосредоточимся на главном

Автор оригинала: Pankaj Kumar.

Утиная типизация в Python

Утиная типизация – это вариация динамического программирования и использует форму потратного рассуждения для проверки типа. В этой статье мы сосредоточимся на главной интуиции набора утки и примеров прививки в Python.

Что такое утиная типизация в Python?

Термин утка Возможно, исходит из популярной фразы:

«Если это ходит как утка, и она доворается, как утка, то это, вероятно, будет уткой».

Наиболее важным аспектом этой фразы мы на самом деле не знаем, является ли объект уткой, мы вывод/уменьшаем из списка поведения, что объект – утка. Важно наблюдать, что мы не проверяем внутренне, если два объекта одинаковы, а скорее используя известное внешнее поведение, чтобы соответствовать двум объектам.

Этот вид рассуждений может быть переведен в область информатики. На динамических языках нет явного проверки типа. Но для определенного использования случая, чтобы гарантировать, как функция ведет себя правильно, становится важно, чтобы тип ввода должен быть проверен. Это может привести к различным ограничениям и проблемам проектирования с точки зрения динамической печати, так что набрав уток, набрав на картинку.

Утка печатает больше важных для методов (поведения), определенных внутри объекта, а не сам объект. Если объекты имеют необходимые методы, объект разрешается пройти. Давайте посмотрим пример, чтобы понять эту концепцию.

Пример утиной типизации

Мы определяем три класса, представляющие разные животные, утки, гусь и кот. Все они производят разные звуки. Утка и гусиная крячка, пока кошка делает звук мяу. Тогда мы определяем функцию Квалак () который занимает животное и печатает описание со звуком кряка. Очевидно, что животное без метода Квалак () Придаст ошибку при прохождении через функцию, указывая неправильный тип переменной (указывающий, что она не удалась, тест утки).

# Define the three classes

class Duck:
  def quack(self):
    print("I am a duck and I quack.")

class Goose:
  def quack(self):
    print("I am a goose and I quack.")

class Cat:
  def meow(self):
    print("I am a dog and I meow.")

# Define the method
def quack(animal):
  animal.quack()

Мы проезжаем три животных и попросите каждого из них крящему. В то время как утка и гусиная крячка, кошка не может вытащить и поэтому бросает ошибку.

quack(Duck())
quack(Goose())
quack(Cat())
Ошибка quack - утка, набрав в Python

Поэтому мы видим, что даже если нет внешней проверки типа объекта, Python знает, что этот объект не поддерживает эту функцию, проверив совместимость метода.

Практический пример duck typing

Одним из наиболее используемых примеров печати утки является итерация в Python. Вы когда-нибудь задавались вопросом, как вы можете написать для цикла с каждым повторным в Python? Или на самом деле то, что делает объект, который потенциал? Петли могут быть использованы в списках, Numpy массивы, функции генератора, погрузчики данных Tensorflow/Pytorch и т. Д.

Утка печатает здесь в игру. Независимо от того, насколько различными этими объектами являются с точки зрения применения, они относятся одинаково из-за набора утки.

Для итерации класс должен иметь __er __ () и __Next __ () функции, которые заставляют его иметь право на итерацию. Python не сильно типа проверки этих классов, что делает его все более и более гибким.

Мы даже можем определить наш собственный итератор для печати квадратных номеров, где мы определяем методы __er __ () и __Next __ () Какие два метода вызываются во время итерации Python.

class Squares:
  def __init__(self, l=0, u=-1):
    self.u = u
    self.n = l
  def __iter__(self):
    return self
  def __next__(self):
    if self.n < self.u:
      s = self.n ** 2
      self.n += 1
      return s
    else:
      raise StopIteration
for i in Squares(1, 4):
  print(i)
1
4
9

Заключение

Поддержка утиной типизации в Python, позволяет бесшовную интеграцию базовой функции Python с пользовательскими классами. Это также позволяет взаимодействовать и интеграцию между двумя разными классами. Мы видели пример итераторов в Python, концепция может быть применена к Len (), какие утки проверяют, есть ли объект __leen __ (), определенный внутри него. Вы можете попробовать различные другие другие методы в Python, изучают, насколько действительно гибкий Python.

использованная литература