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

Python类初始化报错:__init__缺少必填参数student_list求助

解决Course类初始化参数缺失及方法逻辑错误问题

问题重现

我定义了Student和Course两个Python类,代码如下:

class Student:
    def __init__(self, first_name, last_name, id):
        
        self.first_name = first_name
        self.last_name = last_name
        self.id = id

    def __str__(self):

        return "{} {}, {}".format(self.first_name, self.last_name, self.id)

class Course:
    def __init__(self, course_name, student_list):

        self.course_name = course_name
        self.student_list = student_list

    def add_student(self):
        
        self.student_list.append("{}, {}, {}".format(self.first_name, self.last_name, self.id))
        
        return self.student_list

运行测试时持续报错:__init__() missing 1 required positional argument: 'student_list',完整错误回溯:

test_default_case (coding_rooms_unit_tests.CodingRoomsUnitTests) ... ERROR

======================================================================
ERROR: test_default_case (coding_rooms_unit_tests.CodingRoomsUnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usercode/coding_rooms_unit_tests.py", line 14, in test_default_case
    course = Course("Programming")
TypeError: __init__() missing 1 required positional argument: 'student_list'

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)

尝试修改代码但会丢失已有正确得分,不清楚该如何解决。

错误分析

  1. 初始化参数缺失问题:Course类的__init__方法要求传入course_name和student_list两个参数,但测试用例只传了课程名,未传入学生列表。
  2. add_student方法逻辑错误:该方法试图访问self.first_name等属性,但Course类本身并不具备这些属性,应该接收一个Student对象作为参数,再完成添加操作。

修复方案

给Course的__init__方法的student_list设置默认值,同时修正add_student方法的逻辑:

class Student:
    def __init__(self, first_name, last_name, id):
        self.first_name = first_name
        self.last_name = last_name
        self.id = id

    def __str__(self):
        return "{} {}, {}".format(self.first_name, self.last_name, self.id)

class Course:
    # 给student_list设置默认值,兼容只传course_name的调用方式
    def __init__(self, course_name, student_list=None):
        self.course_name = course_name
        # 避免多个实例共享同一空列表的陷阱
        self.student_list = student_list if student_list is not None else []

    # 修改为接收Student对象作为参数
    def add_student(self, student):
        # 直接添加对象,后续可通过str(student)获取格式化字符串
        self.student_list.append(student)
        return self.student_list

修复说明

  • 初始化兼容处理:通过给student_list设置None作为默认值,再在方法内初始化空列表,既满足测试用例Course("Programming")的调用方式,又避免了多个Course实例共享同一列表的问题。
  • 方法逻辑修正:让add_student接收Student对象,直接添加到列表中,既符合面向对象设计逻辑,又能复用Student类已实现的__str__方法生成格式化信息,避免重复拼接字符串。

内容的提问来源于stack exchange,提问作者Kennitala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:15:56