title: Why is IoC / DI not common in Python?
body: <p>In Java <a href="http://en.wikipedia.org/wiki/Inversion_of_Control" rel="noreferrer">IoC</a> / <a href="http://en.wikipedia.org/wiki/Dependency_Injection" rel="noreferrer">DI</a> is a very common practice which is extensively used in web applications, nearly all available frameworks and Java EE. On the other hand, there are also lots of big Python web applications, but beside of Zope (which I've heard should be really horrible to code) IoC doesn't seem to be very common in the Python world. (Please name some examples if you think that I'm wrong).</p>
  
  <p>There are of course several clones of popular Java IoC frameworks available for Python, <a href="http://springpython.webfactional.com/" rel="noreferrer">springpython</a> for example. But none of them seems to get used practically. At least, I've never stumpled upon a <a href="http://www.djangoproject.com/" rel="noreferrer">Django</a> or <a href="http://www.sqlalchemy.org/" rel="noreferrer">sqlalchemy</a>+<code>&lt;insert your favorite wsgi toolkit here&gt;</code> based web application which uses something like that.</p>
  
  <p>In my opinion IoC has reasonable advantages and would make it easy to replace the django-default-user-model for example, but extensive usage of interface classes and IoC in Python looks a bit odd and not »pythonic«. But maybe someone has a better explanation, why IoC isn't widely used in Python.</p>