Что такое 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.

Очевидно, что фреймворк ничего не знает о пользователях или какой-либо другой логике, специфичной для приложения, поэтому клиентский код должен внедрить функциональность геттера пользователя в фреймворк, чтобы аутентификация работала.

Ответы на вопрос(5)

Ваш ответ на вопрос