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