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

如何每次向usedClasses添加classes中类的独立实例?

解决每次添加全新独立实例的问题

你的问题根源很明确:你当前的classes列表里存储的是已经实例化完成的对象,所以每次随机选择的时候,拿到的都是同一个对象的引用——自然不管加多少次到usedClasses里,都是指向同一个实例。

要实现每次添加全新的独立实例,核心思路是:存储类本身,而不是实例,每次选中类之后再动态创建新实例。

具体修改步骤

  1. 先调整classes列表,把类本身放进去(去掉实例化的括号):
classes = [Class1, Class2, Class3]  # 注意这里没有(),存的是类对象
  1. 随机选中类后,调用类来创建全新实例:
import random

classes = [Class1, Class2, Class3]
usedClasses = {}

# 随机选一个类,用random.choice比randint更简洁直接
selected_class = random.choice(classes)
# 创建并添加新实例到usedClasses
usedClasses[len(usedClasses)] = selected_class()

验证示例

为了更直观地看到效果,可以给类加一个唯一标识属性,比如在__init__里生成随机ID:

import random

class Class1:
    def __init__(self):
        self.instance_id = random.randint(1000, 9999)  # 每个实例的ID唯一

class Class2:
    def __init__(self):
        self.instance_id = random.randint(1000, 9999)

class Class3:
    def __init__(self):
        self.instance_id = random.randint(1000, 9999)

# 测试添加3次
usedClasses = {}
for _ in range(3):
    cls = random.choice([Class1, Class2, Class3])
    usedClasses[len(usedClasses)] = cls()

# 打印每个实例的ID,会发现都是不同的
for idx, obj in usedClasses.items():
    print(f"实例 {idx} 的ID: {obj.instance_id}")

运行这段代码,你会看到每个实例的ID都不一样,证明它们是完全独立的新实例。

为什么原来的代码不行?

再回头看你原来的代码:

classes = [Class1(), Class2(), Class3()]  # 这里在初始化时就创建了3个固定实例

这行代码会在程序启动时就生成Class1、Class2、Class3的各一个实例,后续的随机选择只是在这三个已有的实例里挑,所以每次添加到usedClasses的都是同一个实例的引用——比如如果第一次选了Class1()的实例,第二次再选到它时,添加的还是同一个对象,调用方法时自然会互相影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:51:08