Aslında DI / IoC olduğunu sanmıyorum o Python nadir. Ne olduğunu nadir, ancak, DI / IoC olan çerçeveler / konteynerler .
Bir düşünün: DI konteyneri ne yapar? Yapmanıza izin verir
- bağımsız bileşenleri birlikte eksiksiz bir uygulamaya bağlayın ...
- ... işlem esnasında.
"Birlikte kablolama" ve "çalışma zamanında" için isimlerimiz var:
- betik
- dinamik
Dolayısıyla, bir DI kapsayıcısı dinamik bir kodlama dili için bir yorumlayıcıdan başka bir şey değildir. Aslında şunu ifade edeyim: tipik bir Java / .NET DI kapsayıcısı, popo çirkin, bazen XML tabanlı sözdizimi ile gerçekten kötü bir dinamik komut dosyası dili için berbat bir yorumlayıcıdan başka bir şey değildir.
Python'da program yaparken, emrinizde güzel, parlak bir betik diliniz olduğunda neden çirkin, kötü bir betik dili kullanmak istersiniz? Aslında, bu daha genel bir soru: hemen hemen her dilde programladığınızda, Jython ve IronPython'unuz olduğunda neden çirkin, kötü bir komut dosyası dili kullanmak istersiniz?
Özetlemek gerekirse: DI / IoC uygulaması Python'da Java'da olduğu gibi aynı nedenlerle önemlidir. Uygulama DI / IoC ait Ancak diline inşa edilmiştir ve tamamen kaybolur sık sık bu yüzden hafif.
(Bir benzetmenin kısa bir kenarı: montajda, bir alt program çağrısı oldukça büyük bir anlaşma - yerel değişkenlerinizi ve kayıtlarınızı belleğe kaydetmeniz, dönüş adresinizi bir yere kaydetmeniz, talimat işaretçisini aradığınız alt rutine değiştirmeniz, bittiğinde bir şekilde alt rutininize atlamasını sağlayın, argümanları callee'nin bulabileceği bir yere koyun, vb. IOW: montajda, "altyordam çağrısı" bir Tasarım Deseni ve daha önce gibi diller vardı Yerleşik alt program çağrıları olan Fortran, insanlar kendi "alt program çerçevelerini" inşa ediyorlardı. Alt program çerçevelerini kullanmamanız nedeniyle alt program çağrılarının Python'da "nadir" olduğunu söyleyebilir misiniz?)
BTW: Bu mantıksal sonucuna DI almaya neye benzediğini bir örnek için, bir göz atın Gilad Bracha 'ın Dili Programlama tellalların konuyla ilgili ve onun yazıları: