En realidad, no creo que DI / IoC sean tan infrecuentes en Python. Sin embargo, lo que es poco común son los marcos / contenedores DI / IoC .
Piénselo: ¿qué hace un contenedor DI? Te permite
- conecte componentes independientes en una aplicación completa ...
- ... en tiempo de ejecución.
Tenemos nombres para "cablear juntos" y "en tiempo de ejecución":
- secuencias de comandos
- dinámica
Por lo tanto, un contenedor DI no es más que un intérprete para un lenguaje de script dinámico. En realidad, permítanme reformular eso: un contenedor DI Java / .NET típico no es más que un intérprete deficiente para un lenguaje de script dinámico realmente malo con una sintaxis fea, a veces basada en XML.
Cuando programa en Python, ¿por qué querría usar un lenguaje de script feo y malo cuando tiene un lenguaje de script hermoso y brillante a su disposición? En realidad, esa es una pregunta más general: cuando programa en casi cualquier idioma, ¿por qué querría usar un lenguaje de script feo y malo cuando tiene Jython y IronPython a su disposición?
Entonces, para recapitular: la práctica de DI / IoC es tan importante en Python como en Java, exactamente por las mismas razones. La aplicación embargo de DI / COI, está integrado en el lenguaje y, a menudo tan ligero que desaparece por completo.
(Aquí hay un breve aparte para una analogía: en conjunto, una llamada de subrutina es un asunto bastante importante: debe guardar sus variables y registros locales en la memoria, guardar su dirección de retorno en algún lugar, cambiar el puntero de instrucción a la subrutina que está llamando, haga arreglos para que salte de nuevo a su subrutina cuando haya terminado, coloque los argumentos en algún lugar donde el destinatario pueda encontrarlos, y así sucesivamente. IOW: en el ensamblado, "llamada de subrutina" es un Patrón de diseño, y antes había idiomas como Para Fortran, que tenía llamadas de subrutina incorporadas, la gente estaba construyendo sus propios "marcos de subrutina". ¿Diría que las llamadas de subrutina son "poco comunes" en Python, simplemente porque no usa marcos de subrutina?)
Por cierto: para un ejemplo de lo que parece tomar DI a su conclusión lógica, echar un vistazo a Gilad Bracha 's neolengua Lenguaje de programación y sus escritos sobre el tema: