提问人:Gökhan 提问时间:12/5/2021 最后编辑:matchGökhan 更新时间:12/5/2021 访问量:937
如何将类对象作为参数传递到不同的类方法中?
How can I pass a class object as an argument into a different class method?
问:
我有两个班级:
将学生作为列表的教室。 和学生
每次我更新学生的分数时,我都想打电话给他/她所在的教室的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()
我怎样才能做到这一点?
答:
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 为您提供的内容。, , .property
property(f).setter
__repr__
请遵循 pep8 并使用 snake_case 而不是 camelCase
评论