Python 2.7 __init__() принимает ровно 2 аргумента (дано 3)

У меня есть эти классы.Person родительский класс и Student это дочерний класс:

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)

Я получаю эту ошибку, когда пытаюсь создать экземпляр Student:

__init__() takes exactly 2 arguments (3 given)

Что не так с моим кодом?

2 ответа

Решение

Если вы используете супер, вы не проходите self к целевому методу. Это передается неявно.

super(Student, self).__init__(name)

Это всего 2 аргумента (self, name). Когда вы прошли self, это было всего 3 (я, я, имя).

Ты можешь использовать

super(Student, self).__init__(name)

в котором self было передано методу init, поэтому вам не нужно снова записывать его в __init__ метод. Но если вы используете

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

или же

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

Вы должны записать себя в __init__ метод.

Другие вопросы по тегам