Введение
Для Java Injection Dependency работает как чистый OOP, т.е. вы предоставляете интерфейс, который должен быть реализован, и в вашем коде фрейма принимайте экземпляр класса, который реализует определенный интерфейс.
Теперь для Python вы можете сделать то же самое, но я думаю, что в случае Python этот метод слишком велик. Итак, как бы вы реализовали его на питоническом пути?
Пример использования
Скажите, что это код рамки:
class FrameworkClass():
def __init__(self, ...):
...
def do_the_job(self, ...):
# some stuff
# depending on some external function
Основной подход
Самый наивный (и, может быть, лучший?) способ - потребовать, чтобы внешняя функция была передана в конструктор FrameworkClass
, а затем вызывается из метода do_the_job
.
Рамочный код:
class FrameworkClass():
def __init__(self, func):
self.func = func
def do_the_job(self, ...):
# some stuff
self.func(...)
Код клиента:
def my_func():
# my implementation
framework_instance = FrameworkClass(my_func)
framework_instance.do_the_job(...)
Вопрос
Вопрос короткий. Существует ли более широко используемый питонический способ? Или, может быть, библиотеки, поддерживающие такую функциональность?
ОБНОВЛЕНИЕ: Конкретная ситуация
Представьте себе, что я разрабатываю микро-веб-структуру, которая обрабатывает аутентификацию с использованием токенов. Эта структура нуждается в функции для доставки некоторого ID
, полученного из токена, и получения соответствующего ему элемента ID
.
Очевидно, что фреймворк ничего не знает о пользователях или какой-либо другой специфической для приложения логике, поэтому клиентский код должен внедрить функциональность пользовательского геттера в структуру, чтобы сделать работу аутентификации.