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)
尝试修改代码但会丢失已有正确得分,不清楚该如何解决。
错误分析
- 初始化参数缺失问题:Course类的
__init__方法要求传入course_name和student_list两个参数,但测试用例只传了课程名,未传入学生列表。 - 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
相关产品推荐
相关产品推荐

