Ich glaube eigentlich nicht, dass DI/IoC dass ungewöhnlich in Python. Was ist Ungewöhnlich sind jedoch DI/IoC Rahmenwerke/Container .
Überlegen Sie einmal: Was macht ein DI-Container? Er ermöglicht es Ihnen
- unabhängige Komponenten zu einer vollständigen Anwendung zusammenfügen ...
- ... zur Laufzeit.
Wir haben Bezeichnungen für "zusammen verdrahten" und "zur Laufzeit":
- Skripting
- dynamisch
Ein DI-Container ist also nichts anderes als ein Interpreter für eine dynamische Skriptsprache. Lassen Sie es mich anders ausdrücken: Ein typischer Java/.NET-DI-Container ist nichts anderes als ein beschissener Interpreter für eine wirklich schlechte dynamische Skriptsprache mit einer potthässlichen, manchmal XML-basierten Syntax.
Wenn Sie in Python programmieren, warum sollten Sie eine hässliche, schlechte Skriptsprache verwenden wollen, wenn Sie eine schöne, brillante Skriptsprache zur Verfügung haben? Eigentlich ist das eine allgemeinere Frage: Wenn man in so ziemlich jeder Sprache programmiert, warum sollte man dann eine hässliche, schlechte Skriptsprache verwenden, wenn man Jython und IronPython zur Verfügung hat?
Um es noch einmal zusammenzufassen: Die Praxis von DI/IoC ist in Python genauso wichtig wie in Java, und zwar aus genau denselben Gründen. Die Umsetzung von DI/IoC ist jedoch in die Sprache eingebaut und oft so leichtgewichtig, dass sie völlig verschwindet.
(Hier ein kurzer Hinweis als Analogie: In Assembler ist ein Unterprogrammaufruf eine ziemlich große Sache - Sie müssen Ihre lokalen Variablen und Register im Speicher speichern, Ihre Rücksprungadresse irgendwo speichern, den Befehlszeiger auf das Unterprogramm, das Sie aufrufen, ändern, dafür sorgen, dass es irgendwie in Ihr Unterprogramm zurückspringt, wenn es fertig ist, die Argumente irgendwo ablegen, wo der Aufrufende sie finden kann, und so weiter. IOW: in Assembly ist der "Unterprogrammaufruf" ein Design Pattern, und bevor es Sprachen wie Fortran gab, die Unterprogrammaufrufe eingebaut hatten, haben die Leute ihre eigenen "Unterprogramm-Frameworks" gebaut. Würden Sie sagen, dass Unterprogrammaufrufe in Python "unüblich" sind, nur weil Sie keine Unterprogramm-Frameworks verwenden?)
Nebenbei bemerkt: Ein Beispiel dafür, wie es aussieht, wenn man DI zu seiner logischen Schlussfolgerung bringt, finden Sie unter Gilad Bracha 's Newspeak Programmiersprache und seine Schriften zu diesem Thema: