В 2016 году во время PyCon US 2016 в Портленде я встретил Гвидо ван Россума во время networking-сессии в холле. Первый вопрос, который я ему тогда задал относился к реализации интерфейсов в Python (just like in Java). Есть ли шанс, что в будущих версиях Python мы увидим реализацию интерфейсов? На что был получен однозначный ответ, что этого не стоит ждать, для таких целей можно использовать абстрактные классы (модуль abc). После я поинтересовался его мнением про zope.interfaces, на что также была получена рекомендация их не использовать 😢
Но не так давно, шерстя просторы официальной документации, я наткнулся на интересную штуку, а именно на typing.Protocol. По своей сущности это самый настоящий интерфейс. А не так давно нашел и обзор этой штуки, статья must read: I Want A New Duck.
Если кратко, то Protocol в первую очередь нужен, если вы активно используете mypy для статического анализа кода. Наверняка вы могли сталкиваться с аннотациями на кастомные классы, когда в функцию или метод могут передаваться разные объекты, протокол/интерфейс (читай, общие методы) которых одинаковый.
Post #181
922