Ошибка типа: __init__() отсутствует 1 необходимый позиционный аргумент: «Мудрец»

#python #python-3.x #file #multiple-inheritance

Вопрос:

Marks класс

 from Studentclass import Student
from Courseclass import Course

class Marks(Student, Course):
    def __init__(self, Sid,Cid, Mark):
        super().__init__(Sid,Cid)#Error line 7, in __init__ super().__init__(Sid,Cid) TypeError: __init__() missing 1 required positional argument: 'Sage'#
        self.Mark = Mark

    def __repr__(self):
        return '({},{},{})'.format(self.Sid, self.Cid, self.Mark)
 

Основной код

 from Studentclass import Student
from Courseclass import Course
from Marksclass import Marks

def read_populate_marks():
    with open("Marks.txt", "r") as m:
        marks_list = []
        for line in m:
            Sid, Cid, Mark = line.split(",")
            marks = Marks(int(Sid), int(Cid), int(Mark))#Error line 37
            marks_list.append(marks)
        return marks_list

print(read_populate_marks()
 

Я получаю сообщение об ошибке при запуске этой функции, в котором мне предлагается передать Sage из класса учащихся, который я хочу назвать только Sid. та же функция отлично работает с другими классами при первом использовании множественного наследования. что мне делать?

  • студенческий конструктор-это (Sid,Sname,Sage)
  • конструктор курса есть (Cid,Cname,Cstudents) .

Комментарии:

1. Ваш дизайн кажется неправильным : отметка не является ОДНОВРЕМЕННО и Студентом, и Курсом, она может содержать их в качестве атрибута, это не так

Ответ №1:

Похоже, что ваша модель не очень хороша, a Mark не является одновременно студентом и Курсом (как Короваживотное), но Отметка определяется соотношением a Student , и Course поэтому она может иметь их в качестве атрибутов.

 class Marks:
    student_id: int
    course_id: int
    mark = int

    def __init__(self, Sid, Cid, Mark):
        super().__init__()
        self.student_id = Sid
        self.course_id = Cid
        self.mark = Mark

    def __repr__(self):
        return '({},{},{})'.format(self.student_id, self.course_id, self.mark)
 

Этот призыв теперь последователен

 marks = Marks(int(Sid), int(Cid), int(Mark))
 

Комментарии:

1. Это удивительно, что это работает, Спасибо, я застрял на этом в течение последних 4 часов, Большое вам спасибо. это то, что называется множественным наследованием? Кроме того, импорт не требуется?

2. @Котята Нет, ВАШ код был множественным наследованием. поскольку вам не нужны студенты и курсы, нет, вам это не нужно

3. Итак, невозможно использовать множественное наследование для меток классов? поскольку я не даю значения суперклассам, это то, что я хотел сделать, основываясь на нашей схеме проекта

4. @Котята Могли бы поделиться этой диаграммой ? Наследование означает, что класс является подклассом другого, как Собака-это Животное, Кошка-это Животное. Но Марк — студент или Курсант ? Вовсе нет, так что никакого наследования здесь не требуется

5. код должен использовать множественное наследование это проблема, с которой я сталкиваюсь, мне нужно вызывать определенные атрибуты из родительских классов в виде столбцов в файле txt, поэтому позже я буду использовать этот код для целей базы данных