如何将类构造函数属性初始化为空列表?解决GradeRecords类AttributeError报错
错误原因与修复方案
核心错误点
- 构造函数参数语法错误:
__init__定义中new_tuple()属于非法参数写法,参数名不能携带调用符号(),应当修改为new_tuple,如果不需要初始化传入成绩可直接删除该参数。 - 类属性与实例属性混淆:你代码中使用
GradeRecords.grades、GradeRecords.num_courses访问的是类属性,但是你并未给GradeRecords类定义过这两个类属性,仅给实例self定义了对应属性,这就是触发AttributeError: type object 'GradeRecords' has no attribute 'grades'的直接原因。 - 初始化逻辑不符合需求:需求要求
grades初始化为空列表、num_courses初始化为0,原代码初始化阶段就执行了添加元组、更新计数的操作,不符合初始化规则。
修复后代码
class GradeRecords: """represents a grade for a class Instance Attributes: term (str), grades (list of tuples), num_courses (int) """ def __init__(self, term): self.term = term # 按需求初始化为空列表 self.grades = [] # 按需求初始化为0 self.num_courses = 0 # 可新增添加成绩的方法,供初始化后调用 def add_course_grade(self, grade_tuple: tuple): self.grades.append(grade_tuple) self.num_courses += 1
使用示例
# 初始化实例,2024春季学期 record = GradeRecords("2024春季") # 添加课程成绩 record.add_course_grade(("高等数学", 92)) record.add_course_grade(("大学英语", 88)) # 查看属性 print(record.term) # 输出:2024春季 print(record.num_courses) # 输出:2 print(record.grades) # 输出:[('高等数学', 92), ('大学英语', 88)]
如果你需要支持初始化时就传入首个成绩元组,可以修改构造函数为:
def __init__(self, term, first_grade: tuple = None): self.term = term self.grades = [] if first_grade: self.grades.append(first_grade) self.num_courses = len(self.grades)
内容的提问来源于stack exchange,提问作者gogo
相关产品推荐
相关产品推荐

