Python3中如何将类对象列表添加至其他类对象列表?
问题:Python类对象列表的遍历与元素添加错误
定义的类模板
class Student: def __init__(self, student_id, first_name, last_name, pronoun, discipline, grade): self.student_id = student_id self.first_name = first_name self.last_name = last_name self.pronoun = pronoun # he she self.discipline = discipline self.grade = grade # 0 to 100 self.project_marks = [0] * MAX_PROJECTS class Project: def __init__(self, proj_number, proj_name, proj_duedate, proj_pointvalue): self.proj_number = proj_number self.proj_name = proj_name self.proj_duedate = proj_duedate self.proj_pointvalue = proj_pointvalue class Course: def __init__(self, class_name, class_number): self.class_name = class_name self.class_number = class_number self.students = [] self.projects = [] # 假设已定义的add_project方法 def add_project(self, project): self.projects.append(project)
填充courses列表的代码
courses = [] file = open(COURSE_FILENAME, 'r') data = list(csv.reader(file, delimiter=",")) file.close() print(data) count = NUMBER_OF_COURSES for i in range(0, count): courses.append(Course(data[i][0], data[i][1]))
出错的代码及错误信息
尝试将projects添加到对应courses时编写的代码:
for i in courses: for j in projects: courses[i].add_project(project[j])
触发的错误:
TypeError: list indices must be integers or slices, not Project
问题分析与解决方案
错误原因
Python中for i in courses这种遍历方式,i直接是列表中的Course对象实例,而非整数索引。用courses[i]访问列表元素,相当于把Course对象当作索引传入,必然触发类型错误。同理,for j in projects的j是Project对象,project[j]的写法既变量名错误(应为projects)又逻辑错误(不能用对象当索引)。
正确写法
1. 给所有课程添加所有项目(基础示例)
如果需要把所有项目批量添加到每门课程,直接遍历对象本身即可:
# 遍历每个课程对象 for course in courses: # 遍历每个项目对象 for proj in projects: course.add_project(proj)
2. 按关联关系添加(实际场景常用)
如果项目和课程有对应关系(比如通过课程编号匹配),可以根据属性匹配后添加:
# 假设Project类扩展了course_number属性,表示所属课程 for course in courses: for proj in projects: if proj.course_number == course.class_number: course.add_project(proj)
3. 添加学生到对应课程的写法
同理,给课程添加学生时,也采用类似的遍历逻辑:
# 假设Student类有class_number属性,表示所属课程 for course in courses: for student in students: if student.class_number == course.class_number: course.students.append(student)
内容的提问来源于stack exchange,提问作者Tim Williamson
相关产品推荐
相关产品推荐

