super() is super [was Re: Calling dunder methods manually]
Chris Angelico
rosuav at gmail.com
Sat Apr 15 20:49:42 EDT 2017
On Sun, Apr 16, 2017 at 10:35 AM, Steve D'Aprano
<steve+python at pearwood.info> 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):
A.__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.
ChrisA
More information about the Python-list
mailing list