Ответ
Делегат (Delegate) — это поведенческий паттерн проектирования, который позволяет объекту передать (делегировать) выполнение определенной задачи другому, отдельному объекту-исполнителю.
В Python, в отличие от языков вроде C#, нет встроенного ключевого слова delegate. Однако этот паттерн легко реализуется благодаря тому, что функции являются объектами первого класса.
Основные способы реализации:
-
Функции как объекты. Самый простой способ — передать одну функцию в качестве аргумента другой.
def greeter(name): return f"Hello, {name}!" def execute_delegate(func, arg): # Выполнение делегировано функции 'func' return func(arg) # Передаем функцию greeter как делегат result = execute_delegate(greeter, "Alice") print(result) # Вывод: Hello, Alice! -
Классы с методом
__call__. Объект класса можно сделать вызываемым, как функцию, что позволяет хранить состояние.class Adder: def __init__(self, value_to_add): self.value = value_to_add def __call__(self, x): # Логика делегирована этому методу return self.value + x # add_five - это вызываемый объект-делегат add_five = Adder(5) result = add_five(10) print(result) # Вывод: 15
Зачем это нужно?
- Разделение ответственностей: Основной код не знает о деталях реализации делегата.
- Гибкость: Позволяет легко менять поведение на лету, подставляя разные реализации делегата.
- Переиспользование кода: Часто используется для реализации колбэков, обработчиков событий и паттерна "Стратегия".