super() woes (n00b)

Jean-Michel Pichavant jeanmichel at sequans.com
Fri Jun 18 05:19:56 EDT 2010


Deadly Dirk wrote:
> I cannot get right the super() function:
> Python 3.1.1+ (r311:74480, Nov  2 2009, 14:49:22) 
> [GCC 4.4.1] on linux2
> Type "copyright", "credits" or "license()" for more information.
> ==== No Subprocess ====
>   
>>>> class P:
>>>>         
>     def __init__(__class__,self):
>         print("I am a member of class P")
>
>         
>   
>>>> class C(P):
>>>>         
>     def __init__(self):
>         super().__init__(self)
>         print("I am a member of class C")
>
>         
>
> class P:
>     def __init__(self):
>         print("I am a member of class P")
>
> class C(P):
>     def __init__(self):
>         super().__init__(self)
>         print("I am a member of class C")
>
> x=C()
>
> That is more or less the text from the "Quick Python Book". What am I 
> doing wrong?
>
>   
If you're quite new to Python I would advise to drop super and use an 
explicit call, sounds lame but my guess is that many people do that, 
'cause explicit >> implicit. Super is meant to solve some issues about 
multi inheritance, especially diamond diagram inheritance. It has no 
benefit for single inheritance.

I'm pretty sure someone will state that understanding super is pretty 
much easy once you've read the documenation but anticipating all the 
underlying concepts may be tricky. The only situation where super is 
absolutely required is when the inheritance diagram is built dynamically 
during execution.
Otherwise, I would say "Have the nuts to explicit which base class 
method you want to call" (easy for single inheritance though :) )

class C(P):
    def __init__(self):
       P.__init__(self)


JM



More information about the Python-list mailing list