¿Por qué y cómo usar el super de Python (tipo 1, tipo 2)?

super tiene 2 args,

super(type, obj_of_type-or-subclass_of_type) 

Entiendo cómo y por qué usar super con el 2do arg siendo obj_of_type. Pero no entiendo el asunto para la segunda subclase de arg.

Cualquiera puede mostrar por qué y cómo?

Pasas un objeto si quieres invocar un método de instancia. Pasas una clase si quieres invocar un método de clase.

El ejemplo clásico para usar super() para los métodos de clase es con los métodos de fábrica, donde desea que se llamen todos los métodos de fábrica de la superclase.

 class Base(object): @classmethod def make(cls, *args, **kwargs): print("Base.make(%s, %s) start" % (args, kwargs)) print("Base.make end") class Foo(Base): @classmethod def make(cls, *args, **kwargs): print("Foo.make(%s, %s) start" % (args, kwargs)) super(Foo, cls).make(*args, **kwargs) print("Foo.make end") class Bar(Base): @classmethod def make(cls, *args, **kwargs): print("Bar.make(%s, %s) start" % (args, kwargs)) super(Bar, cls).make(*args, **kwargs) print("Bar.make end") class FooBar(Foo,Bar): @classmethod def make(cls, *args, **kwargs): print("FooBar.make(%s, %s) start" % (args, kwargs)) super(FooBar, cls).make(*args, **kwargs) print("FooBar.make end") fb = FooBar.make(1, 2, c=3) 

” Invocar los métodos de clase de una superclase en Python ” tiene un ejemplo del mundo real.