Что такое Pythonic способ для инъекции зависимостей?
Для Java Dependency Injection работает как чистый ООП, то есть вы предоставляете интерфейс для реализации и в своем коде фреймворка принимаете экземпляр класса, который реализует определенный интерфейс.
Теперь для 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(...)
ВопросВопрос короткий. Есть ли лучший обычно используемый Pythonic способ сделать это? Или, может быть, какие-либо библиотеки, поддерживающие такую функциональность?
ОБНОВЛЕНИЕ: конкретная ситуацияПредставьте, что я разрабатываю микро-веб-фреймворк, который обрабатывает аутентификацию с использованием токенов. Эта структура нуждается в функции для обеспечения некоторыхID
получить из токена и получить пользователя, соответствующего этомуID
.
Очевидно, что фреймворк ничего не знает о пользователях или какой-либо другой логике, специфичной для приложения, поэтому клиентский код должен внедрить функциональность геттера пользователя в фреймворк, чтобы аутентификация работала.