Python面向对象编程:为什么无法向Student类的列表属性添加元素?
问题原因
你代码里存在两个核心错误:
- 列表的
append()方法是原地修改列表,执行后的返回值固定为None,你写的self.all_grades = self.all_grades.append(newest_grade)相当于直接把存储成绩的列表覆盖成了None,这是你得到None类型的核心原因。 - 实例化
Student类时,__init__方法要求传入name参数,你写的Josh = Student()缺少了必填的name参数,运行会直接抛出参数缺失报错。 - 额外优化:现有
get_mean方法只把平均值存到了实例属性里,没有返回值,调用时无法直接拿到计算结果,建议补充return逻辑。
修复后的完整代码
class Student: def __init__(self, name): self.name = name self.all_grades = [] def add_exam(self, newest_grade): self.newest_grade = newest_grade # 直接调用append即可,不需要重新赋值给all_grades self.all_grades.append(newest_grade) def get_mean(self): self.average = sum(self.all_grades)/len(self.all_grades) # 补充返回值,调用方法可直接拿到平均分 return self.average # 实例化时传入必填的name参数 Josh = Student("Josh") Josh.add_exam(72)
验证结果
修复后执行print(Josh.all_grades)会输出[72],调用Josh.get_mean()会返回平均分72.0。
内容的提问来源于stack exchange,提问作者JD65
相关产品推荐
相关产品推荐

