it might not be needed there but it's needed to ensure that all __init__
methods of any superclasses are called.
Not calling super in all __init__ methods might break initialization
when deriving from multiple classes way down the hierarchy.
you have a class A, Class B derived from A and Class C derived from
Class B and a Class D that has nothing to do with class A or B.
The __init__ method of class C call super which calls the B.__init__, in
B.__init__ super is called again and A.__init__ is called. if A.__init__
doesn't call super the execution goes back to B.__init__ and C.__init__
after the methods are finished, but D.__init__ is never called because
the super call in A.__init__ will trigger that.
That's what in experienced in one of my projects I'm migrated from
python 2 to python3. I might be wrong here, but that's what I'm
Before super you called the __init__ method of any class you derived
from directly. Now the super call has to handle that.