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__
.