¿Cuál es una forma pitónica para la inyección de dependencia?
Para Java, la Inyección de dependencias funciona como OOP pura, es decir, proporciona una interfaz para implementar y en su código marco acepta una instancia de una clase que implementa la interfaz definida.
Ahora, para Python, puede hacer lo mismo, pero creo que ese método fue una sobrecarga en el caso de Python. Entonces, ¿cómo lo implementaría de la manera pitónica?
Caso de usoDigamos que este es el código marco:
class FrameworkClass():
def __init__(self, ...):
...
def do_the_job(self, ...):
# some stuff
# depending on some external function
El enfoque básicoLa forma más ingenua (¿y quizás la mejor?) Es requerir que la función externa se suministre alFrameworkClass
constructor, y luego ser invocado desde eldo_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(...)
PreguntaLa pregunta es corta. ¿Hay alguna manera mejor de usar Pythonic para hacer esto? ¿O tal vez alguna biblioteca que soporte tal funcionalidad?
ACTUALIZACIÓN: Situación concretaImagina que desarrollo un marco web micro, que maneja la autenticación usando tokens. Este marco necesita una función para proporcionar algunosID
obtenido del token y obtener el usuario correspondiente a eseID
.
Obviamente, el marco no sabe nada sobre los usuarios o cualquier otra lógica específica de la aplicación, por lo que el código del cliente debe inyectar la funcionalidad del captador del usuario en el marco para que la autenticación funcione.