In general, the super keyword can be used to call overridden methods, access hidden fields or invoke a superclass's constructor. The one with super has greater flexibility The call chain for the methods can be intercepted and functionality injected. Super() lets you avoid referring to the base class explicitly, which can be nice But the main advantage comes with multiple inheritance, where all sorts of fun stuff can happen. In fact, multiple inheritance is the only case where super() is of any use
I would not recommend using it with classes using linear inheritance, where it's just useless overhead. I'm currently learning about class inheritance in my java course and i don't understand when to use the super() call I found this example of code where super.variable is used 'super' object has no attribute '__sklearn_tags__' This occurs when i invoke the fit method on the randomizedsearchcv object I attempted to tune the hyperparameters of an xgbregressor.
When i try to run it as at the end of the file i get this stacktrace 'super' object has no attribute do_something class parent As for chaining super::super, as i mentionned in the question, i have still to find an interesting use to that For now, i only see it as a hack, but it was worth mentioning, if only for the differences with java (where you can't chain super). The implicit __class__ used by super does not exist at this point Super has a lesser benefit of reducing requires changes if you rename or change the base class
In python 3, the arguments to super are optional, so you can just do super().__init__().
OPEN