Python-way и интерфейсы

Python нативно не поддерживает интерфейсы. Все обсуждения, которые я находил, ссылались на "duck typing". Но, к примеру, если у меня есть набор классов, которые мне при переборе нужно различать по поддерживаемым ими действиям, которые не очень зависят от базового класса, то в случае с интерфейсами я могу проверить, что класс реализует, скажем, интерфейс ILoggable, тогда я буду уверен ,что в классе есть все нужные методы. А вот в случае утиной типизации придётся либо проверять каждый нужный метод, либо делать какую-то обёртку, которая фактически будет делать тоже самое, что и интерфейс. Что на этот счёт говорит идеология питона? Раз интерфейсов нет, значит как-то обходятся без них (сторонние реализации в расчёт не беру).
  • Вопрос задан
  • 7502 просмотра
Решения вопроса 1
Tiendil
@Tiendil
Разработчик ПО.
Из глоссария Питона

Abstract base classes complement duck-typing by providing a way to define interfaces when other techniques like hasattr() would be clumsy or subtly wrong (for example with magic methods). ABCs introduce virtual subclasses, which are classes that don’t inherit from a class but are still recognized by isinstance() and issubclass(); see the abc module documentation. Python comes with many built-in ABCs for data structures (in the collections module), numbers (in the numbers module), and streams (in the io module). You can create your own ABCs with the abc module.

Видимо, это то, что надо.

От себя скажу, что не замечаю сильного увлечения ABC в сообществе (и вообще проверкой интерфейсов) — они скорее для стандартной библиотеки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
vvpoloskin
@vvpoloskin
Инженер связи
Почему бы не попробовать интерфейсную часть сделать отдельным классом, запустить его во множественное наследование и проверять его вхождение в bases? Интерфейс у вас будет как миксин.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы