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
相关产品推荐
相关产品推荐

