Introducción
Para Java, Dependency Injection funciona como POO puro, es decir, usted proporciona una interfaz para ser implementada y en su código marco acepta una instancia de una clase que implementa la interfaz definida.
Ahora, para Python, puedes hacer lo mismo, pero creo que ese método era demasiado general en el caso de Python. Entonces, ¿cómo lo implementaría de la manera Pythonic?
Caso de uso
Digamos que este es el código del marco:
class FrameworkClass():
def __init__(self, ...):
...
def do_the_job(self, ...):
# some stuff
# depending on some external function
El enfoque básico
La forma más ingenua (¿y quizás la mejor?) Es exigir que la función externa se proporcione en el FrameworkClass
constructor y luego se invoque desde el do_the_job
método.
Código marco:
class FrameworkClass():
def __init__(self, func):
self.func = func
def do_the_job(self, ...):
# some stuff
self.func(...)
Codigo del cliente:
def my_func():
# my implementation
framework_instance = FrameworkClass(my_func)
framework_instance.do_the_job(...)
Pregunta
La pregunta es breve. ¿Existe alguna forma Pythonic mejor utilizada para hacer esto? ¿O tal vez alguna biblioteca que admita dicha funcionalidad?
ACTUALIZACIÓN: Situación concreta
Imagine que desarrollo un marco de micro web, que maneja la autenticación mediante tokens. Este marco necesita una función para proporcionar algunos ID
obtenidos del token y obtener el usuario correspondiente ID
.
Obviamente, el marco no sabe nada sobre los usuarios ni sobre ninguna otra lógica específica de la aplicación, por lo que el código del cliente debe inyectar la funcionalidad del getter del usuario en el marco para que la autenticación funcione.
AttributeError
o deTypeError
otra manera), pero por lo demás es lo mismo.