【问题标题】:Printing from different class从不同类别打印
【发布时间】:2020-06-04 11:06:53
【问题描述】:

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

我有一个名为 Student 的班级。在这堂课中,我得到一个学生的名字,然后他的成绩计算他的平均成绩。当然,那很容易。 以下是我迄今为止取得的成功:

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])

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

编写一个 ClassRoom 类,它有一个构造函数,该构造函数接收一个 Student 类型的列表,并将这个列表保存到一个成员中。下面应该创建一个教室:

class_room = ClassRoom([John])

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

调用 print(class_room) 应该会输出:

[('John', 95)]

我该怎么做?

我对 OOP 很陌生,甚至不知道如何开始。

谢谢!

【问题讨论】:

  • 您的问题有点过于宽泛,因为它基本上要求我们为您完成所有工作。您能分享一下您已经尝试过的方法以及您遇到的具体问题吗?
  • @ThierryLathuille 基本上,我忘了我需要添加 str() 才能打印出来。你是对的,我也应该发布它。谢谢。

标签: python class


【解决方案1】:

你可以这样做:

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>

在上面的代码中,Student知道如何显示自己,(name, avg),所以你可以打印它,如果你喜欢:print(john)

对于您的ClassRoom,您只需覆盖__str__ 即可显示学生列表。由于每个学生都知道如何展示自己,因此它会胜任。

【讨论】:

    【解决方案2】:

    您需要将 str() 函数添加到班级和学生班级。 str() 如果班级应该遍历学生列表并将其逐一打印。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多