如何在打印类对象时更改输出以避免获取其地址

2024-06-16 08:40:59 发布

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

我有两个班:学生班和教室。 我想让学生班得到一个学生的名字和一份学生成绩的清单。我还添加了一个方法,用于计算列表的平均值,一个用于获取学生姓名,另一个用于返回姓名和平均值的元组。 我希望教室类获得学生对象的列表,并定义一个方法,该方法在打印教室对象而不是对象的地址时返回元组列表

例如:

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

Tags: 方法nameself列表getreturndefstudent
1条回答
网友
1楼 · 发布于 2024-06-16 08:40:59

试试这个:

首先,创建教室对象实例时,需要学生对象列表,而不是字符串列表:

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

最后,在课堂上确定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)))

相关问题 更多 >