如何将类对象作为参数传递到不同的类方法中?

How can I pass a class object as an argument into a different class method?

提问人:Gökhan 提问时间:12/5/2021 最后编辑:matchGökhan 更新时间:12/5/2021 访问量:937

问:

我有两个班级:

将学生作为列表的教室。 和学生

每次我更新学生的分数时,我都想打电话给他/她所在的教室的calculate_average。由于显而易见的原因,下面的代码不起作用,因为我不知道如何将学生所在的 Classroom 作为函数参数。

class Classroom:
    students = None

    def __init__(self):
        self.students = []

    def addStudent(self, student):
        self.students.append(student)

    def calculate_average(self):
        # sums student scores and divides them with student number

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

    def getInfo(self):
        return self.name, self.score

    def setScore(self, score):
        self.score = score
        Classroom.calculate_average()

我怎样才能做到这一点?

python 参数传递 引用 层次结构

评论


答:

0赞 match 12/5/2021 #1

假设多个 Students 共享同一个 ClassRoom,您可能希望创建一个命名的 Classroom 实例,然后在实例化时将其传递给 Student 类。像这样:

class Classroom():
    def __init__(self):
        self.students = []

    def addStudent(self, student):
        self.students.append(student)

    def calculate_average(self):
        return sum(x.score for x in self.students if hasattr(x, 'score')) / len(self.students)

class Student():
    def __init__(self, classroom):
        self.classroom = classroom
        self.classroom.addStudent(self)

    def setScore(self, score):
        self.score = score

classroom1 = Classroom()
student1 = Student(classroom1)
student2 = Student(classroom1)

student1.setScore(100)
student2.setScore(50)
print(classroom1.calculate_average())
# 75
0赞 Işık Kaplan 12/5/2021 #2
class Classroom:
    def __init__(self):
        self.students = []

    @property
    def average(self):
        return sum(student.score for student in self.students)/len(self.students)

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

    def __repr__(self):
        return f"Student(name={self.name}, score={self.score})"


student_1 = Student("John Doe", 10)
student_2 = Student("Jane Doe", 20)

clasroom_1 = Clasroom()

clasroom_1.students.append(student_1)
clasroom_1.students.append(student_2)

clasroom_1.average # 15

student_1.score = 30

clasroom_1.average # 25

使用 python 为您提供的内容。, , .propertyproperty(f).setter__repr__

请遵循 pep8 并使用 snake_case 而不是 camelCase