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

Было бы возможно создать интерфейс класса в Python и различных реализациях интерфейса.

Пример: Я хочу создать класс для pop3 доступа (и все методы и т.д.). Если я иду с коммерческим компонентом, я хочу перенести его для соблюдения контракта.

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

Возможный? Я плохо знаком с Python.

6
задан Blankman 18 May 2010 в 18:50
поделиться

4 ответа

Да, это возможно. Обычно для этого нет никаких препятствий: просто сохраните стабильный API и измените способ его реализации.

0
ответ дан 10 December 2019 в 02:43
поделиться

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

class BaseAccess:
  def open(arg):
    raise NotImplementedError()

class Pop3Access(BaseAccess):
  def open(arg):
    ...

class AlternateAccess(BaseAccess):
  def open(arg):
    ...

Но вы можете легко написать тот же код без использования BaseAccess. Сильно типизированный язык нуждается в интерфейсе для проверки типов во время компиляции. Для Python в этом нет необходимости, поскольку все просматривается динамически во время выполнения. Google 'duck typing' для ознакомления с философией.

В Python 2.6 добавлен модуль Abstract Base Classes. Но я им не пользовался.

6
ответ дан 10 December 2019 в 02:43
поделиться

Конечно. В этом случае нет необходимости создавать базовый класс или интерфейс, так как все динамично.

2
ответ дан 10 December 2019 в 02:43
поделиться

Один из вариантов - использовать интерфейсы zope. Однако, как было сказано Wai Yip Tung, вам не нужно использовать интерфейсы для достижения тех же результатов.

Пакет zope.interface на самом деле является скорее инструментом для обнаружения того, как взаимодействовать с объектами (обычно в рамках больших кодовых баз с несколькими разработчиками).

1
ответ дан 10 December 2019 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: