O que é uma maneira pitônica de injeção de dependência?
Para Java, a Dependency Injection funciona como OOP puro, ou seja, você fornece uma interface a ser implementada e no código da estrutura aceita uma instância de uma classe que implementa a interface definida.
Agora, para o Python, você pode fazer o mesmo, mas acho que esse método estava sobrecarregado demais no caso do Python. Então, como você o implementaria da maneira pitônica?
Caso de UsoDigamos que este seja o código da estrutura:
class FrameworkClass():
def __init__(self, ...):
...
def do_the_job(self, ...):
# some stuff
# depending on some external function
A Abordagem BásicaA maneira mais ingênua (e talvez a melhor?) É exigir que a função externa seja fornecida aoFrameworkClass
construtor e, em seguida, ser chamado a partir dodo_the_job
método.
Código de estrutura:
class FrameworkClass():
def __init__(self, func):
self.func = func
def do_the_job(self, ...):
# some stuff
self.func(...)
Código do cliente:
def my_func():
# my implementation
framework_instance = FrameworkClass(my_func)
framework_instance.do_the_job(...)
Pergunta, questãoA pergunta é curta. Existe alguma maneira Pythonic mais comumente usada para fazer isso? Ou talvez alguma biblioteca que suporte essa funcionalidade?
ATUALIZAÇÃO: Situação concretaImagine que eu desenvolva uma micro estrutura da web, que lida com autenticação usando tokens. Essa estrutura precisa de uma função para fornecer algunsID
obtido do token e obter o usuário correspondente a esseID
.
Obviamente, a estrutura não sabe nada sobre usuários ou qualquer outra lógica específica do aplicativo; portanto, o código do cliente deve injetar a funcionalidade getter do usuário na estrutura para fazer a autenticação funcionar.