In realtà non penso che DI / IoC siano così rari in Python. Ciò che è insolito, tuttavia, sono i framework / container DI / IoC .
Pensaci: cosa fa un contenitore DI? Te lo permette
- collega componenti indipendenti in un'applicazione completa ...
- ... in fase di esecuzione.
Abbiamo nomi per "cablaggio insieme" e "in fase di esecuzione":
- scripting
- dinamico
Quindi, un contenitore DI non è altro che un interprete per un linguaggio di script dinamico. In realtà, lascia che lo riformuli: un tipico contenitore DI Java / .NET non è altro che un brutto interprete per un linguaggio di scripting dinamico davvero brutto con una sintassi brutta, a volte basata su XML.
Quando programmi in Python, perché dovresti voler usare un brutto e brutto linguaggio di scripting quando hai un linguaggio di scripting bello e brillante a tua disposizione? In realtà, questa è una domanda più generale: quando programmi in quasi tutte le lingue, perché dovresti usare un brutto e brutto linguaggio di scripting quando hai Jython e IronPython a tua disposizione?
Quindi, per ricapitolare: la pratica di DI / IoC è altrettanto importante in Python come in Java, esattamente per gli stessi motivi. L' implementazione di DI / IoC, tuttavia, è integrata nel linguaggio e spesso così leggera da svanire completamente.
(Ecco un breve accenno per un'analogia: nell'assemblaggio, una chiamata di subroutine è un affare piuttosto importante: devi salvare le variabili locali e i registri in memoria, salvare l'indirizzo di ritorno da qualche parte, cambiare il puntatore delle istruzioni alla subroutine che stai chiamando, fai in modo che salti in qualche modo nella tua subroutine quando è finita, metti gli argomenti da qualche parte in cui la chiamata può trovarli, e così via. IOW: nell'assemblaggio, "chiamata alla subroutine" è un modello di progettazione, e prima che esistessero lingue come Fortran che aveva chiamate subroutine incorporate, la gente stava costruendo i propri "framework subroutine". Diresti che le chiamate subroutine sono "non comuni" in Python, solo perché non usi i framework subroutine?)
BTW: per un esempio di quello che sembra a prendere DI alla sua logica conclusione, dare un'occhiata a Gilad Bracha 's Neolingua linguaggio di programmazione ed i suoi scritti sul tema: