correct way to use super (argument passing)
<p>So I was following <a href="http://fuhm.net/super-harmful/">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">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>
