Делегаты в Python
15.01.2025
Вопрос:
Есть ли в Python делегаты, аналогичные public event Action
в C#?
Ответы и решения:
DobroAlex:
Делегатов в Python в явном виде нет.
Можно переопределить метод
__iadd__
, но возникает вопрос, зачем это нужно.
outoftime:
Чтобы решить проблему, необходимо чётко понимать концепции MVC и делегатов.
Рекомендуется изучить MVC через Ruby on Rails.
Garry Galler:
Делегаты можно реализовать через абстракцию шаблона проектирования.
Варианты реализации:
Использование миксинов (классов, подмешиваемых к другим).
Передача функции-обработчика в качестве параметра класса.
Пример ситуации:
Проект на PyQT5 с разделением на файлы
view
,model
,controller
.Требуется отделить логику модели от представления. Например:
В модели вызывается метод
progress()
из контроллера.Это нарушает принцип разделения, и для решения нужен делегат.
Пример кода из model
:
Пример метода progress
из controller
:
Заметки:
Делегаты в Python реализуются через функции обратного вызова (callback).
В данном примере можно:
Передавать метод
progress
как параметр в классArchiver
.Создать интерфейс для вызова делегата.
Пример решения:
Использование:
Дополнительно:
Принцип MVS не существует. Автор, вероятно, имел в виду либо опечатку, либо путает с MVC.
Last updated