Множественное наследование и super()

Я новичок и меня зацепило это сомнение...

У меня есть класс ProfessorAuxiliar, который наследует атрибуты классов Professor и Aluno. Но при использовании super() возвращается TypeError: __init __ () takes 7 positional arguments but 10 were given.

...

class Aluno(Pessoa):

    def __init__(self, nome, sobrenome, cpf, data, sexo, matricula, semestre, curso):
        super().__init__(nome, sobrenome, cpf, data, sexo)
        self.__matricula = matricula
        self.__semestre = semestre
        self.__curso = curso


class Professor(Pessoa):

    __lista_de_indicacoes = []

    def __init__(self, nome, sobrenome, cpf, data, sexo, materia):
        super().__init__(nome, sobrenome, cpf, data, sexo)
        self.__materia = materia

class ProfessorAuxiliar(Professor, Aluno):

    def __init__(self, nome, sobrenome, cpf, data, sexo, materia, matricula, semestre, curso):
        super().__init__(nome, sobrenome, cpf, data, sexo, materia, matricula, semestre, curso)

...

Как я могу заставить класс ProfessorAuxiliar наследовать все атрибуты двух других?


person Mr. Tooth    schedule 14.08.2020    source источник
comment
Для дальнейшего объяснения очень полезен эта ветка.   -  person mustafasencer    schedule 14.08.2020
comment
Похоже, вы полагаетесь на конструктор для каждой настройки. Для семестра и курса это не кажется убедительным. Как только вы сосредоточите данные о пользователях в одном родительском классе, у вас больше не будет коллизий (т. е. вам придется передавать одни и те же параметры в разные родительские классы) и, возможно, даже больше не потребуется множественное наследование.   -  person guidot    schedule 14.08.2020


Ответы (2)


Вместо super попробуйте использовать parent_classname.__init__() для каждого из унаследованных классов и передайте эти аргументы соответственно конструкторам этих родительских классов. EDIT: в классе ProfessorAuxiliar

person shreyaskar    schedule 14.08.2020

Что-то вроде этого, я думаю, правильный путь.

class ProfessorAuxiliar(Professor, Aluno): 

    def __init__(self, nome, sobrenome, cpf, data, sexo, materia, matricula, semestre, curso):
        Professor.__init__(self,self, nome, sobrenome, cpf, data, sexo, matricula, semestre, curso)
        Aluno.__init__(self,nome, sobrenome, cpf, data, sexo)
person Arundeep Chohan    schedule 14.08.2020