Создание интерфейса и сменных реализаций в Python - PullRequest
7 голосов
/ 18 мая 2010

Можно ли создать интерфейс класса в python и различные реализации интерфейса.

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

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

возможно? Я новичок в питоне.

Ответы [ 4 ]

7 голосов
/ 18 мая 2010

Для людей со строгим типизированным языком, 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. Но я этим не пользовался.

2 голосов
/ 18 мая 2010

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

1 голос
/ 18 мая 2010

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

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

0 голосов
/ 18 мая 2010

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

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