интерфейса?
С ABC вроде как образуется абстрактный класс, но он в динамическом языке может выполнять функции интерфейса
p.s еще увидел реализацию через typing.Protocol, тут я вообще не понял(
Protocols are defined by including a special new class typing.Protocol (an instance of abc.ABCMeta)
и в чем разница, если использовать сразу metaclass=abc.ABCMeta
Надо начать с определения интерфейса. Дальше будет понятнее
Как мне лучше реализовать инверсию зависимостей(DI)? С использованием zope.interface, abcmeta или protocol Интерфейс служит для дополнительного уровня абстракций \ оболочкой взаимодействия разных классов. Абстрактный класс полностью заменяет собой интерфейс, вроде как в языках без множественного наследования нельзя наследовать больше одного класса(абстрактного), но Пайтон к таким не относится. В Пайтоне из-за утиной типизации надобности технической нет, но это ухудшает разборчивость кода. Легче понять функцию\метод который принимает экземпляр класса с предопределенными методами (интерфейс)
Абстрактный класс не заменяет собой интерфейс, так как от него надо наследоваться
не заменяет, но что мешает его так использовать? особенно на более старых версиях питона
То, что это не интерфейс будет
Банда четырех однозначно разделяет интерфейсы и типы. Первое - описывает набор доступных методов у объекта, второе - как он был создан. Совместимость с интерфейсом не требует явной декларации этого, она просто есть. Именно так работают протоколы. Во втором питоне было принято протоколы описывать словами в документации
Обсуждают сегодня