python - 打印类对象时如何更改输出以避免获取其地址
问题描述
我有 2 个班级:学生和教室。我希望学生班级获得学生姓名和学生成绩列表。我还添加了一个计算列表平均值的方法,一个获取学生姓名的方法,以及一个返回姓名和平均值的元组的方法。我希望 ClassRoom 类获取学生对象列表并定义一个方法,该方法在打印 ClassRoom 对象而不是对象的地址时返回元组列表。
例子:
Moses = Student("Moses", [97.5, 87, 60])
Dan = Student("Dan", [85, 96, 100])
students = ["Moses", "Dan"]
classRoom = ClassRoom(students)
print(classRoom)
# The output should be:
[("Moses", 81.5), ("Dan", 93.66666666666667)]
我知道有一个使用方法的选项:def __str__(self)
,但我不知道如何正确使用它。
这是我迄今为止尝试过的:
class Student():
def __init__(self, student_name, grads_list):
self.__name = student_name
self.__grads = grads_list
def get_grade_avg(self):
return sum(self.__grads) / len(self.__grads)
def get_name(self):
return self.__name
def get_name_and_average(self):
return self.__name, self.__grads
class ClassRoom:
def __init__(self, student_list):
self.__students = student_list
def __str__(self):
for a_student in self.__students:
return "[" + str(a_student.get_name_and_average) + "]"
解决方案
尝试这个:
首先,当您创建 ClassRoom 对象的实例时,您需要一个学生对象列表,而不是字符串列表:
students = [Moses, Dan]
classRoom = ClassRoom(students)
您还需要为学生类创建一个str方法:
class Student():
def __init__(self, student_name, grads_list):
self.__name = student_name
self.__grads = grads_list
def get_grade_avg(self):
return sum(self.__grads) / len(self.__grads)
def get_name(self):
return self.__name
def get_name_and_average(self):
return self.__name, self.__grads
def __str__(self):
return "{}, {}".format(self.__name, self.get_grade_avg())
最后修复ClassRoom 类的str :
class ClassRoom:
def __init__(self, student_list):
self.__students = student_list
def __str__(self):
return "[{}]".format(", ".join(map(lambda x: "(" + str(x) + ")", self.__students)))
推荐阅读
- visual-studio-2019 - 使用 UNIX 行尾配置 Visual Studio 2019
- datetime - 从 GPS 转换时间戳
- c++ - 将 Char 值分配给向量元素。C++
- php - 无法将原始查询构造到数组中
- php - 为 WooCommerce 分类法(如产品标签)制作下拉菜单
- api - Asp.Net Core - 继承控制器及其路由,但覆盖方法
- powershell - 如何将冒号分隔的字符串存储在哈希表中?
- sql - 1 个表组中的列与另一个表中的 2 个其他列的总和
- sockets - 将客户端重新连接到不同的套接字
- angular - 如何测试使用商店选择器的 NGRX 效果?