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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:53:19