title: Is __init__ a class method?
body: <p>I was looking into Python's super method and multiple inheritance. I read along something like when we use super to call a base method which has implementation in all base classes, only one class' method will be called even with variety of arguments. For example,</p>
  
  <pre><code>class Base1(object):
      def __init__(self, a):
          print "In Base 1"
  
  class Base2(object):
      def __init__(self):
          print "In Base 2"
  
  class Child(Base1, Base2):
      def __init__(self):
          super(Child, self).__init__('Intended for base 1')
          super(Child, self).__init__()# Intended for base 2
  </code></pre>
  
  <p>This produces <code>TyepError</code> for the first <code>super</code> method. <code>super</code> would call whichever method implementation it first recognizes and gives <code>TypeError</code> instead of checking for other classes down the road. However, this will be much more clear and work fine when we do the following:</p>
  
  <pre><code>class Child(Base1, Base2):
      def __init__(self):
          Base1.__init__(self, 'Intended for base 1')
          Base2.__init__(self) # Intended for base 2
  </code></pre>
  
  <p>This leads to two questions:</p>
  
  <ol>
  <li>Is <code>__init__</code> method a static method or a class method?</li>
  <li>Why use super, which implicitly choose the method on it's own rather than explicit call to the method like the latter example? It looks lot more cleaner than using super to me. So what is the advantage of using <code>super</code> over the second way(other than writing the base class name with the method call)</li>
  </ol>