Я на самом деле не думаю , что DI / IoC являются , что редкость в Python. Что является необычным, однако, DI / IoC каркасы / контейнеры .
Подумайте об этом: что делает контейнер DI? Это позволяет вам
- объединить независимые компоненты в единое приложение ...
- ... во время выполнения.
У нас есть имена для «соединения вместе» и «во время выполнения»:
- скриптовый
- динамический
Таким образом, контейнер DI - это не что иное, как интерпретатор динамического языка сценариев. На самом деле, позвольте мне перефразировать это: типичный контейнер Java / .NET DI - не что иное, как дурацкий интерпретатор для действительно плохого языка динамических сценариев с непривлекательным, иногда основанным на XML, синтаксисом.
Когда вы программируете на Python, зачем вам использовать уродливый, плохой язык сценариев, когда в вашем распоряжении прекрасный, блестящий язык сценариев? На самом деле, это более общий вопрос: когда вы программируете практически на любом языке, зачем вам использовать уродливый, плохой язык сценариев, когда у вас есть Jython и IronPython?
Итак, подведем итог: практика использования DI / IoC в Python так же важна, как и в Java, по тем же причинам. реализация DI / IoC встроена в язык и часто настолько легка, что полностью исчезает.
(Вот краткое замечание для аналогии: в ассемблере вызов подпрограммы является довольно серьезной проблемой - вы должны сохранить свои локальные переменные и регистры в памяти, где-то сохранить свой обратный адрес, изменить указатель инструкции на вызываемую подпрограмму, сделайте так, чтобы он каким-то образом возвращался в вашу подпрограмму после ее завершения, помещал аргументы куда-то, где вызываемый может их найти, и т. д. IOW: в сборке «вызов подпрограммы» является шаблоном проектирования, и до того, как появились такие языки, как Fortran, в котором были встроены вызовы подпрограмм, люди строили свои собственные "структуры подпрограмм". Вы бы сказали, что вызовы подпрограмм "необычны" в Python, просто потому, что вы не используете структуры подпрограмм?)
BTW: для примера того , что он выглядит как взять DI к своему логическому завершению, взгляните на Гилада Браха «s новояза Язык программирования и его труды по этой теме: