Python 2.7 __init __ () toma exactamente 2 argumentos (3 dados)

Tengo estas clases. Person es la clase de padres y el Student es la clase de niños:

 class Person(object): def __init__(self, name): self.name = name class Student(Person): def __init__(self, avr, name): self.avr = avr super(Student, self).__init__(self, name) 

Recibo este error cuando bash crear una instancia de Student :

 __init__() takes exactly 2 arguments (3 given) 

¿Qué está mal con mi código?

Si está utilizando super, no se pasa al método de destino. Se pasa implícitamente.

 super(Student, self).__init__(name) 

Eso es 2 argumentos en total (uno mismo, nombre). Cuando pasaste a ti self , eso fue 3 en total (yo, yo, nombre).

Puedes usar

 super(Student, self).__init__(name) 

en el que self se ha pasado al método init , por lo que no necesita escribirlo de nuevo en el método __init__ . Pero si usas

 super(Student, Student).__init__(self, name) 

o

 super(Student, self.__class__).__init__(self, name) 

Tienes que escribirte en el método __init__ .