Python调用类方法get_grade报错缺失required参数self的解决求助
错误原因
你遇到的get_grade() missing 1 required positional argument: 'self'报错,是因为调用类的实例方法时没有绑定对应实例:Python中没有加@classmethod、@staticmethod装饰器的普通类方法,默认第一个参数self需要接收调用该方法的实例本身,只有通过「实例.方法名()」的形式调用时,Python才会自动把实例作为self参数传入方法。
问题出在Course类的get_average_grade方法内:
value += Student.get_grade()
你直接通过类名Student调用get_grade方法,没有传入任何实例作为self参数,因此触发了参数缺失错误。
修复方案
将错误行修改为用循环遍历得到的student实例调用方法即可:
value += student.get_grade()
修复后完整可运行代码
class Student: def __init__(self, name, age, grade): self.name = name self.age = age self.grade = grade # 0 - 100 def get_grade(self): return self.grade class Course: def __init__(self, name, max_students): self.name = name self.max_students = max_students self.students = [] def add_student(self, student): if len(self.students) < self.max_students: self.students.append(student) return True return False def get_average_grade(self): value = 0 for student in self.students: # 改为用实例调用方法,Python会自动传入self参数 value += student.get_grade() return value / len(self.students) s1 = Student("Tim", 19, 95) s2 = Student("Bill", 19, 75) s3 = Student("Jill", 19, 65) course = Course("Science", 2) course.add_student(s1) course.add_student(s2) print(course.get_average_grade())
运行后输出正确的平均成绩:85.0
内容的提问来源于stack exchange,提问作者Swerve
相关产品推荐
相关产品推荐

