¿Cómo evitar la recursión infinita con super ()?

Tengo un código como este:

class A(object): def __init__(self): self.a = 1 class B(A): def __init__(self): self.b = 2 super(self.__class__, self).__init__() class C(B): def __init__(self): self.c = 3 super(self.__class__, self).__init__() 

La creación de instancias de B funciona como se esperaba, pero la creación de instancias de C se ha repetido infinitamente y provoca un desbordamiento de stack. ¿Como puedo resolver esto?

Al crear instancias de C, B.__init__ , self.__class__ seguirá siendo C, por lo que la llamada super () lo devuelve a B.

Al llamar a super (), use los nombres de clase directamente. Así que en B, llame a super(B, self) , en lugar de super(self.__class__, self) (y, en buena medida, use super(C, self) en C). Desde Python 3, puedes usar super () sin argumentos para lograr lo mismo