super() is super [was Re: Calling dunder methods manually]

Chris Angelico rosuav at
Sat Apr 15 20:49:42 EDT 2017

On Sun, Apr 16, 2017 at 10:35 AM, Steve D'Aprano
<steve+python at> wrote:
>> eaisier to just write the path in long-form.
> Easier and wrong.
> If you have multiple inheritance, and don't use super(), then your code is
> buggy, whether you have realised it or not.
> Manually calling your parent class is only acceptable if you can absolutely
> guarantee that your class, all its parent classes, and all its subclasses
> will ONLY use single inheritance.

Plus, it's fragile in that it names the parent class everywhere.

class A:
    def __init__(self): ...
    def __add__(self, other): ...
    def __or__(self, other): ...

class B(A):
    def __init__(self):
    def __add__(self, other):
        A.__add__(self, other)

Every method you subclass-and-call-parent needs to say the name of the
parent class. With super, they all just say super(). I know which one
I'd rather do.


More information about the Python-list mailing list