我需要在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的评论。