title: correct way to use super (argument passing)
body: <p>So I was following <a href="http://fuhm.net/super-harmful/" rel="noreferrer">Python's Super Considered Harmful</a>, and went to test out his examples.</p>
  
  <p>However, <a href="http://fuhm.net/super-harmful/example1-3.py" rel="noreferrer">Example 1-3</a>, which is supposed to show the correct way of calling <code>super</code> when handling <code>__init__</code> methods that expect different arguments, flat-out doesn't work.</p>
  
  <p>This is what I get:</p>
  
  <pre><code>~ $ python example1-3.py 
  MRO: ['E', 'C', 'A', 'D', 'B', 'object']
  E arg= 10
  C arg= 10
  A
  D arg= 10
  B
  Traceback (most recent call last):
    File "Download/example1-3.py", line 27, in &lt;module&gt;
      E(arg=10)
    File "Download/example1-3.py", line 24, in __init__
      super(E, self).__init__(arg, *args, **kwargs)
    File "Download/example1-3.py", line 14, in __init__
      super(C, self).__init__(arg, *args, **kwargs)
    File "Download/example1-3.py", line 4, in __init__
      super(A, self).__init__(*args, **kwargs)
    File "Download/example1-3.py", line 19, in __init__
      super(D, self).__init__(arg, *args, **kwargs)
    File "Download/example1-3.py", line 9, in __init__
      super(B, self).__init__(*args, **kwargs)
  TypeError: object.__init__() takes no parameters
  </code></pre>
  
  <p>It seems that <code>object</code> itself violates one of the best practices mentioned in the document, which is that methods which use <code>super</code> must accept <code>*args</code> and <code>**kwargs</code>.</p>
  
  <p>Now, obviously Mr. Knight expected his examples to work, so is this something that was changed in recent versions of Python? I checked 2.6 and 2.7, and it fails on both.</p>
  
  <p>So what is the correct way to deal with this problem?</p>