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

为何每次迭代创建的Room对象均相同?如何生成唯一Box内容组合?

问题原因与解决方案

问题原因

你在Room类中定义的boxes = []是类属性,它属于整个Room类本身,而非单个Room实例。所有通过Room()创建的对象都会共享这同一个boxes列表:

  • 第一次创建Room时,会向这个共享列表中添加5个Box对象;
  • 后续每次创建新的Room,都会继续往这个共享列表里追加新的Box;
  • 你每次打印的room.boxes[0]始终是列表中第一个被添加的Box,所以内容完全不变。

解决方法

将boxes改为实例属性,在__init__方法内部初始化,让每个Room实例拥有独立的boxes列表:

import random


class Box:
    def __init__(self, box_number, box_content):
        self.number = box_number
        self.content = box_content

    def __str__(self):
        return f"Box: {self.number} | Content: {self.content}"


class Room:
    def __init__(self, num_of_boxes):
        # 在这里初始化实例属性boxes,每个Room实例都有独立的列表
        self.boxes = []
        box_contents = [*range(num_of_boxes)]
        random.shuffle(box_contents)
        for i in range(num_of_boxes):
            self.boxes.append(Box(i + 1, box_contents[i] + 1))


def run_cycle():
    room = Room(5)
    print(room.boxes[0])


for _ in range(5):
    run_cycle()

修改后,每次创建Room都会生成全新的独立boxes列表,随机打乱的内容也会应用到当前实例的列表中,运行后就能看到每次输出的Box内容都不同了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:03:31