Je ne pense pas vraiment que DI / IoC soient si rares en Python. Ce qui est rare, cependant, ce sont les cadres / conteneurs DI / IoC .
Pensez-y: que fait un conteneur DI? Il vous permet de
- câbler des composants indépendants dans une application complète ...
- ... lors de l'exécution.
Nous avons des noms pour «câbler ensemble» et «à l'exécution»:
- scripting
- dynamique
Ainsi, un conteneur DI n'est rien d'autre qu'un interprète pour un langage de script dynamique. En fait, permettez-moi de reformuler cela: un conteneur DI Java / .NET typique n'est rien d'autre qu'un interpréteur de merde pour un langage de script dynamique vraiment mauvais avec une syntaxe bout à bout, parfois basée sur XML.
Lorsque vous programmez en Python, pourquoi voudriez-vous utiliser un langage de script laid et mauvais alors que vous avez un beau langage de script brillant à votre disposition? En fait, c'est une question plus générale: lorsque vous programmez dans à peu près n'importe quel langage, pourquoi voudriez-vous utiliser un langage de script laid et mauvais alors que vous avez Jython et IronPython à votre disposition?
Donc, pour récapituler: la pratique de DI / IoC est tout aussi importante en Python qu'en Java, pour exactement les mêmes raisons. La mise en œuvre de DI / IoC est cependant intégrée au langage et souvent si légère qu'elle disparaît complètement.
(Voici une brève mise de côté pour une analogie: dans l'assemblage, un appel de sous-programme est une affaire assez importante - vous devez enregistrer vos variables et registres locaux en mémoire, enregistrer votre adresse de retour quelque part, changer le pointeur d'instruction en sous-programme que vous appelez, faites en sorte qu'il revienne d'une manière ou d'une autre dans votre sous-programme lorsqu'il est terminé, placez les arguments quelque part où l'appelé peut les trouver, etc. IOW: dans l'assemblage, "l'appel de sous-programme" est un modèle de conception, et avant il y avait des langues comme Fortran qui avait des appels de sous-programmes intégrés, les gens construisaient leurs propres "cadres de sous-programmes". Diriez-vous que les appels de sous-programmes sont "rares" en Python, juste parce que vous n'utilisez pas de cadres de sous-programmes?)
BTW: pour un exemple de ce qu'il ressemble à prendre DI à sa conclusion logique, jetez un oeil à Gilad Bracha de novlangue Langage de programmation et de ses écrits sur le sujet: