super or not super?

Ian Kelly ian.g.kelly at gmail.com
Tue Jul 16 01:29:53 EDT 2019


On Sun, Jul 14, 2019 at 7:14 PM Chris Angelico <rosuav at gmail.com> wrote:
>
> On Mon, Jul 15, 2019 at 10:51 AM Paulo da Silva
> <p_s_d_a_s_i_l_v_a_ns at netcabo.pt> wrote:
> >
> > Às 15:30 de 12/07/19, Thomas Jollans escreveu:
> > > On 12/07/2019 16.12, Paulo da Silva wrote:
> > >> Hi all!
> > >>
> > >> Is there any difference between using the base class name or super to
> > >> call __init__ from base class?
> > >
> > > There is, when multiple inheritance is involved. super() can call
> > > different 'branches' of the inheritance tree if necessary.
> > > ...
> >
> > Thank you Jollans. I forgot multiple inheritance. I never needed it in
> > python, so far.
> >
>
> Something to consider is that super() becomes useful even if someone
> else uses MI involving your class. Using super() ensures that your
> class will play nicely in someone else's hierarchy, not just your own.

Just using super() is not enough. You need to take steps if you want to
ensure that you class plays nicely with MI. For example, consider the
following:

class C1:
    def __init__(self, name):
        self._name = name

class C2(C1):
    def __init__(self, name, value):
        super().__init__(name)
        self._value = value

This usage of super is just fine for the single-inheritance shown here. But
there are two reasons why this cannot be neatly pulled into an MI
hierarchy. Can you spot both of them?



More information about the Python-list mailing list