Есть ли смысл в контейнере внедрения зависимостей в Python?

Я возился с python, как обычно, он приводит мой жесткий статически типизированный объектно-ориентированный мир в некоторый беспорядок. Python поддерживает утиную типизацию, не имеет удобной концепции программирования на основе интерфейсов (как в интерфейсах C #) и допускает использование глобальных переменных. Со всеми этими преимуществами действительно есть какая-то точка для контейнера внедрения зависимостей или среда выполнения Python становится контейнером.

Я понимаю, что указывают на эти контейнеры в объектно-ориентированных языках со статической типизацией, таких как Java и C #, но где такая вещь может вписаться в сумасшедший мир python (мне это нравится)?

Я всегда подозревал, что внедрение зависимостей в качестве шаблона проектирования было плохим запах, созданный всем, должен быть классом "нацистского мышления", то есть C # и Java, будет ли я прав, или что-то мне не хватает?

Пока я думаю, что могу охватить фабрики, синглтоны, мультиэкземпляры объекты, просто используя Globals. Я также отключаю Обратите внимание, что аспект Aspect тоже покрыт, хотя я все еще думаю об этом.

Утиная типизация - это то, что меня сейчас заводит, поэтому я привык определять интерфейсы, а затем основывать классы на этих интерфейсах и позволять статическим вещам покрывать мою глупость, и я считаю, что без статической типизации контейнеры немного бесполезны.

править

Думаю, я не буду использовать фреймворки / контейнеры Dependency Injector при использовании python. В этом нет никакого смысла. После обдумывания и прочтения ответов становится ясно, что без статических определений типов данные обещания настолько бесполезны, что зачем вообще беспокоиться. Утиная печать - вот что это такое, и единственное обещание можно дать через документацию. До тех пор, пока ссылка входит в класс Method / function через параметр подписи, а не через эфир среды программирования, я думаю, что я буду в безопасности.

Однако настораживает тот факт, что я не могу применить свои будет на других через мои чрезмерные методы проектирования, как я сделал в Java и C #. Мне все равно ... нет :)

16
задан WeNeedAnswers 31 July 2011 в 01:54
поделиться