• Интерфейс в Python — это набор сигнатур методов, которые должны быть предоставлены реализующим классом.
  • Интерфейс содержит методы, которые являются абстрактными по своей природе. Абстрактные методы будут иметь единственное объявление, поскольку реализации нет.
  • Интерфейс в Python определяется с использованием класса Python и является подклассом интерфейса. Интерфейс, который является родительским интерфейсом для всех интерфейсов.
  • Реализации будут выполняться классами, которые унаследуют интерфейс. Интерфейсы Python немного отличаются от интерфейсов других языков, таких как Java, C# или C++.
  • Реализация интерфейса — это способ написания организованного кода.

Давайте разберемся с интерфейсами Python на нескольких примерах.

Содержание

Как объявить интерфейс

Здесь мы увидим, как объявить интерфейсный модуль в Python.

Синтаксис:

 класс MyInterface(zope.interface.Interface)
  • Сначала мы импортируем модуль zope.interface.
  • zope.interface — это модуль, который используется для реализации объектного интерфейса в Python.
  • Библиотека zope.interface — способ выйти из ситуации, когда что-то неясно.
  • Интерфейс действует как образец для проектирования классов. Здесь @zope.interface.implementer (Lunch) реализован с использованием декоратора-реализатора в классе.
  • Этот пакет напрямую экспортирует атрибуты и интерфейсы.
  • Для преодоления неопределенности интерфейса реализован модуль zope.

Реализация (класс) — эта функция возвращает логическое значение. Если класс реализует интерфейс, результатом будет True, иначе False.

Пример:

 импортировать zope.interface
 класс Lunch(zope.interface.Interface):
 Northindian = zope.interface.Attribute("шоколад")
 def food(собственный, североиндийский):
 проходить
 def colddrinks(сам, напитки):
 проходить
 @zope.interface.implementer(Обед)

 класс Lunch(zope.interface.Interface):
 def food(собственный, североиндийский):
 вернуться в Северную Индию
 def colddrinks(self,beverages):
 возврат напитков

 colddrinks = Обед['colddrinks']
 еда = Обед['еда']
 print(Lunch.implementedBy(Lunch))
 print(type(холодные напитки))
 печать(тип(еда))

Здесь мы видим, что класс реализован в виде интерфейса. Возвращается логическое значение true. Также мы можем заметить, что функция вызывается дважды, поскольку в классе определены две функции: def food и def colddrinks.

На изображении ниже показан результат:

интерфейс на питоне

Как создать интерфейс

Существует два способа создания и реализации интерфейса в Python:

  • Неформальный интерфейс.
  • Формальный интерфейс.

Неформальный интерфейс

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

Часто используемые методы, которые применяются для выполнения определённых операций:

  1. __iter__ — этот метод возвращает итератор для объекта.
  2. __len__ — этот метод возвращает длину строки, списка, словаря или кортежа.
  3. __contain__ — этот метод используется для проверки того, содержит ли он другую строку.

Пример:

class Chocolate:
    def __init__(self, items):
        self.__items = items
    def __len__(self):
        return len(self.__items)
    def __contains__(self, items):
        return items in self.__items
fav_chocolate = Chocolate(["kitkat", "diarymilk", "munch","5star"])
print(len(fav_chocolate))
print("kitkat" in fav_chocolate)
print("munch" not in fav_chocolate)
print("dirymilk" not in fav_chocolate)
print("5star" in fav_chocolate)
  • В этом примере я реализовал __len__ и __contain__. Мы можем напрямую использовать функцию len() для экземпляра шоколада, а затем нам нужно проверить наличие элемента в списке.
  • Используя оператор in, print (len(fav_chocolate)) используется для определения длины списка.
  • Здесь мы видим, что он возвращает логическое значение. Если элемент присутствует в списке, он вернет true, в противном случае — false. На скриншоте ниже показан результат:

Неформальный интерфейс на Python

Формальный интерфейс

Здесь мы видим формальный интерфейс Python:

  • Формальный интерфейс в Python — это интерфейс, который применяется формально. Для создания формального интерфейса нам нужно использовать ABC (абстрактные базовые классы).
  • Азбука объясняется, когда мы определяем класс, который является абстрактным по своей природе, мы также определяем методы базового класса как абстрактные методы.
  • Любой объект, который мы получаем из базовых классов, вынужден реализовывать эти методы.
  • В этом примере я импортировал модуль abc и определил класс Food. @abc.abstractmethod — это декоратор, указывающий абстрактные методы. Он используется для объявления абстрактных методов для свойств.
  • Я определил вкус функции def, используя ключевое слово def. Используя ключевое слово self, мы можем получить доступ к атрибутам и методам класса.
  • И я также определил подкласс как класс North_indian, а затем распечатал экземпляр из класса Food. Оператор pass используется в качестве заполнителя.

Пример:

import abc
class Food(abc.ABC):
  @abc.abstractmethod
  def taste( self ):
      pass
class north_indian(Food) :
  def taste(self):
     print(" Cooking! ")
s = north_indian()
print( isinstance(s, Food))

На скриншоте ниже показан результат:

В этом выводе мы можем увидеть логическое значение. Оно будет равно true, только если экземпляр класса существует, иначе будет false.

Формальный интерфейс в Python

Примеры

Здесь мы увидим, как производный класс определяет абстрактный метод. Для этого мы импортировали модуль abc и создали класс myinterface, который наследуется от класса ABC из этого модуля.

Пример:

import abc
class myinterface(abc.ABC):
      @abc.abstractclassmethod
      def display():
        pass
print("This is Myclass")
class Myclass(myinterface):
      def display():
        pass
obj=Myclass()

Здесь создаётся объект obj класса Myclass, который выводит на экран текст «Это Myclass». Ниже вы можете увидеть примеры интерфейса Python.

что такое интерфейс в Python с примером

Несколько интерфейсов

Теперь мы можем видеть несколько интерфейсов в Python.

В приведённом ниже примере нам необходимо импортировать модуль abc. После этого мы можем инициализировать класс Food и его подклассы NorthIndian() и SouthIndian().

Пример:

import abc
class Food(abc.ABC):
  @abc.abstractmethod
  def taste( self ):
   pass
class northIndian(Food) :
  def taste(self):
   print(" Cooking! ")
class Food(abc.ABC):
   @abc.abstractmethod
   def taste(self):
    pass
class southIndian(Food) :
   def taste(self) :
    print(" Cooking!.. ")
a = northIndian()
s = southIndian()
print( isinstance(s, northIndian))
print( isinstance(s, southIndian))
print( isinstance(a, northIndian))
print( isinstance(a, southIndian))

Здесь мы видим в выводе значение false, так как экземпляр s был присвоен SouthIndian, но в операторе печати ему было присвоено значение NorthIndian. Чтобы убедиться в этом, вы можете обратиться к скриншотам ниже.

разница между абстрактным классом и интерфейсом в Python

Разница между абстрактным классом и интерфейсом

Давайте поймем разницу между абстрактным классом и интерфейсом в Python.

Интерфейс Python Абстрактный класс Python
Интерфейс — это набор методов и атрибутов этого объекта. Мы можем использовать абстрактный базовый класс для определения и реализации интерфейса.
Все методы интерфейса абстрактны. Абстрактный класс может иметь как абстрактные, так и конкретные методы.
Мы используем интерфейс, если все функции необходимо реализовать по-разному для разных объектов. Абстрактные классы используются, когда есть какая-то общая черта, общая для всех объектов как таковых.
Интерфейс медленный по сравнению с абстрактным классом. Абстрактные классы работают быстрее.
Добавить комментарий