如何每次向usedClasses添加classes中类的独立实例?
解决每次添加全新独立实例的问题
你的问题根源很明确:你当前的classes列表里存储的是已经实例化完成的对象,所以每次随机选择的时候,拿到的都是同一个对象的引用——自然不管加多少次到usedClasses里,都是指向同一个实例。
要实现每次添加全新的独立实例,核心思路是:存储类本身,而不是实例,每次选中类之后再动态创建新实例。
具体修改步骤
- 先调整
classes列表,把类本身放进去(去掉实例化的括号):
classes = [Class1, Class2, Class3] # 注意这里没有(),存的是类对象
- 随机选中类后,调用类来创建全新实例:
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
相关产品推荐
相关产品推荐

