Na verdade, não acho que DI / IoC seja tão incomum em Python. O que é incomum, no entanto, são estruturas / contêineres DI / IoC .
Pense nisso: o que um contêiner DI faz? Permite que você
- conecte componentes independentes em uma aplicação completa ...
- ... em tempo de execução.
Temos nomes para "ligar juntos" e "em tempo de execução":
- scripting
- dinâmico
Portanto, um contêiner de DI não é senão um intérprete para uma linguagem de script dinâmico. Na verdade, deixe-me reformular: um contêiner DI Java / .NET típico nada mais é do que um intérprete de baixa qualidade para uma linguagem de script dinâmica realmente ruim com sintaxe horrível, às vezes baseada em XML.
Quando você programa em Python, por que você gostaria de usar uma linguagem de script feia e ruim quando tem uma linguagem de script bonita e brilhante à sua disposição? Na verdade, essa é uma pergunta mais geral: quando você programa em praticamente qualquer linguagem, por que deseja usar uma linguagem de script feia e ruim quando tem o Jython e o IronPython à sua disposição?
Então, para recapitular: a prática de DI / IoC é tão importante em Python quanto em Java, exatamente pelas mesmas razões. A implementação do DI / IoC, no entanto, é incorporada à linguagem e geralmente é tão leve que desaparece completamente.
(Aqui está um breve resumo de uma analogia: na montagem, uma chamada de sub-rotina é muito importante - você precisa salvar as variáveis locais e os registros na memória, salvar o endereço de retorno em algum lugar, alterar o ponteiro da instrução para a sub-rotina que você está chamando, organize para que, de alguma forma, volte à sua sub-rotina quando terminar, coloque os argumentos em algum lugar onde o receptor possa encontrá-los, etc. IOW: em assembly, "chamada de subrotina" é um padrão de design e antes havia idiomas como Para o Fortran que tinha chamadas de sub-rotina integradas, as pessoas estavam criando suas próprias "estruturas de sub-rotina". Você diria que as chamadas de sub-rotina são "incomuns" no Python, apenas porque você não usa estruturas de sub-rotina?)
BTW: para um exemplo de como se parece a tomar DI à sua conclusão lógica, dê uma olhada Gilad Bracha 's Novilíngua Linguagem de programação e seus escritos sobre o assunto: