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

Python OOP排课系统Session分配异常问题求助

Python自动排课系统Room重复分配Session问题排查
  • 你遇到的问题几乎可以确定是类属性与实例属性混淆导致的。如果Room类中存储Session的容器(比如列表)定义在类层级而非__init__方法内,所有Room实例会共享同一个容器,最终所有Room都会拿到全部Session。

错误示例:

class Room:
    # 类属性:所有Room实例共享该列表
    assigned_sessions = []

    def add_session(self, session):
        self.assigned_sessions.append(session)

修正后的代码:

class Room:
    def __init__(self):
        # 实例属性:每个Room实例拥有独立的列表
        self.assigned_sessions = []

    def add_session(self, session):
        self.assigned_sessions.append(session)
  • 另一种可能是初始化Room对象时复用了同一个Session列表引用。比如在Main类中生成Room时,把同一个列表传给所有Room的构造函数,这种情况要确保每个Room初始化时都创建新的空列表。

错误写法:

# 所有Room共用同一个列表
session_list = []
rooms = [Room(session_list) for _ in range(5)]

修正写法:

# 每个Room都有独立的空列表
rooms = [Room([]) for _ in range(5)]
# 更稳妥的方式是让Room内部自行初始化列表,避免外部传入共享引用
  • 排查时可以打印每个Room对象的id(self.assigned_sessions),如果所有Room的该ID值相同,即可确认是共享了同一个容器对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:45:15