如何将项目添加到列表中选择的学生,并在课堂上获得一个空列表



我需要在python中创建两个函数来类"sClass"-第一个函数向列表中的具体学生添加分数,第二个函数清除students_register并返回一个空列表(只有没有分数的名字)。将所选学生的成绩添加到第一类是没有问题的,不幸的是,我需要在第二类中创建这两个函数。知道怎么做吗?

class Student(list):
    def __init__(self, name, grades=[]):
        self.name = name
        self.extend(grades)
    def __str__(self):
        grades = ""
        for i in self:
            grades += str(i) + ", "
        return self.name + ": " + grades
    def say_name(self):
        return self.name
    def add_grade(self, grade):
        if int(grade) in range (1,6):
            self.append(grade)
        else:
            print ("Add correct grade!")

class sClass(list):
    def __init__(self, students_register=[]):
        self.extend(students_register)
    def __str__(self):
        result = ""
        for student in self:
            result += str(student) + 'n'
        return result
    def add_student(self,student):
        if student not in self:
            self.append(student)
    #def add_grade_to_chosen_student(self, name, grade):
        #self.extend
    #def clear_students_grades(self):
        #def __init__(self, students_register=[]):
            #self.remove()
    def Student_name(self, student):
        return Student.say_name()

George = Student("George", [1,2,3])
John = Student("John", [1,1,5,5,5])
Emily = Student("Emily", [1,2])
A_class = sClass([George, John, Emily])
print(A_class)
Emily.add_grade(4)
print (A_class)

我不确定我是否正确理解了这个问题,但我会尝试一下。

我相信您只是想将student对象作为参数传递给add_grade_to_chosen_student方法(在您的sClass中)。

在该方法中,您希望在student对象上调用方法add_grade,如

def add_grade_to_chosen_student(self, student, grade):
    student.add_gade(grade)

对于clear_students_grades函数,您必须迭代sClass的self并清除学生的成绩。这可以通过在学生课堂上编写reset_grades方法来实现。sClass中clear_students_grades中的代码看起来像:

def clear_students_grades(self):
      for student in self:
           student.reset_grades()

我不得不说,我不喜欢继承学生对象的列表类。这令人困惑。这里最好使用composition而不是继承(你让一个学生对象保存一个代表其成绩的列表对象。)。也可以看看@John Zwinck的评论。

最新更新