On 06/18/10 19:19, Jean-Michel Pichavant wrote: > 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.
Actually there is. If you need to anticipate the possibility of someone else (or you in the future) multiply-inheriting from your singly-inheriting class, then your singly-inheriting class would need to use super as well, otherwise the multiply-inheriting class might not be properly initialized. > 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) -- http://mail.python.org/mailman/listinfo/python-list