不同类别的印刷品

2024-05-13 20:27:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我搜索过类似的问题,但没有找到任何东西。 显然是因为我的问题很基本,但我觉得很难理解

我有一个班叫学生。在这节课上,我得到一个学生的名字,他的成绩,然后计算他的平均成绩。那当然很简单。 以下是我迄今为止取得的成功:

class Student:
    def __init__(self, name, grades_list):
        self.name = name
        self.grades_list = grades_list

    def get_grade_avg(self):
        avg = sum(self.grades_list) / len(self.grades_list)
        return avg

    def get_name(self):
        return self.name

从上一部分我有:

john = Student("John", [100, 90 ,95])

现在我需要回答以下问题:

编写一个类教室,其构造函数接收Student类型的列表,并将该列表保存给成员。以下内容应创建教室:

class_room = ClassRoom([John])

实现课堂教学,以便在课堂类型上调用print(class_room)时,按顺序打印学生姓名和学生平均成绩的元组列表

调用打印(教室)应输出:

[('John', 95)]

我该怎么做

我对OOP非常陌生,甚至不知道如何开始

谢谢大家!


Tags: nameself列表getreturndefjohnstudent
2条回答

您需要向类和学生类添加str()函数str()如果课堂上的学生应该反复浏览学生名单,并逐个打印出来

您可以这样做:

class Student:
    ...
    def __repr__(self):
        return str((self.name, self.get_grade_avg()))


class ClassRoom:
    def __init__(self, students):
        self.students = students

    def __str__(self):
        return str(self.students)

john = Student("John", [100, 90 ,95])
mike = Student("Mike", [90, 80, 85])
c = ClassRoom([john, mike])
print(c)

# [('John', 95.0), ('Mike', 85.0)]
print(c)

在对某个对象调用print时,将调用其__str__方法,如果未定义该方法,则调用__repr__。默认情况下,某个对象的__repr__是这样的:<__main__.Student object at 0x7f4b35a3a630>

在上面的代码中,aStudent知道如何显示自己(name,avg),因此如果您愿意,可以打印它:print(john)

对于ClassRoom,只需覆盖__str__即可显示学生列表。因为每个学生都知道如何表现自己,所以他们会做好的

相关问题 更多 >