Calling __init__ with multiple inheritance

Peter Otten __peter__ at web.de
Mon Mar 28 12:51:31 EST 2005


jfj wrote:

> Peter Otten wrote:

>> Here is an alternative approach that massages the initializer signatures
>> a bit to work with super() in a multiple-inheritance environment:
> 
>>         super(Father, self).__init__(p_father=p_father, **more)
> 
> 
> Is there any advantage using super in this case?
> I think the case Father.__init__ (self, params) is simpler
> and does the job perfectly well.

I agree.
 
> super seems to be needed in "Dynamic Inheritance" cases where
> we don't know an object's bases and there are comlicated mro issues!

Suppose you wanted factor out common code from the Father and Mother classes
into a Parent class -- something neither complicated nor farfetched. With
explicit calls to Parent.__init__() you would end up calling it twice from
Child.__init__(). So when you anticipate that your class hierarchy may
change, or that your classes may be subclassed by users of your library, I
think super() is somewhat less errorprone.

Peter




More information about the Python-list mailing list