170 похожих чатов

Есть какая-то разница\предпочтение в использование zope.interface или ABC в реализации

интерфейса?

С ABC вроде как образуется абстрактный класс, но он в динамическом языке может выполнять функции интерфейса

p.s еще увидел реализацию через typing.Protocol, тут я вообще не понял(

Protocols are defined by including a special new class typing.Protocol (an instance of abc.ABCMeta)
и в чем разница, если использовать сразу metaclass=abc.ABCMeta

6 ответов

21 просмотр

Надо начать с определения интерфейса. Дальше будет понятнее

GHdeewre- Автор вопроса
Tishka17
Надо начать с определения интерфейса. Дальше будет...

Как мне лучше реализовать инверсию зависимостей(DI)? С использованием zope.interface, abcmeta или protocol Интерфейс служит для дополнительного уровня абстракций \ оболочкой взаимодействия разных классов. Абстрактный класс полностью заменяет собой интерфейс, вроде как в языках без множественного наследования нельзя наследовать больше одного класса(абстрактного), но Пайтон к таким не относится. В Пайтоне из-за утиной типизации надобности технической нет, но это ухудшает разборчивость кода. Легче понять функцию\метод который принимает экземпляр класса с предопределенными методами (интерфейс)

GHdeewre
Как мне лучше реализовать инверсию зависимостей(DI...

Абстрактный класс не заменяет собой интерфейс, так как от него надо наследоваться

не заменяет, но что мешает его так использовать? особенно на более старых версиях питона

Kirill Leontev
не заменяет, но что мешает его так использовать? о...

Банда четырех однозначно разделяет интерфейсы и типы. Первое - описывает набор доступных методов у объекта, второе - как он был создан. Совместимость с интерфейсом не требует явной декларации этого, она просто есть. Именно так работают протоколы. Во втором питоне было принято протоколы описывать словами в документации

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

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта