You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将类构造函数属性初始化为空列表?解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:09:03