我遇到的问题是,当我向列表添加实例时,实例属性会被意外更改。新的Gem实例随机生成一个值和名称。
self.gem_list = []
for i in range(self.gem_count):
g = Gem()
print(g)
self.gem_list.append(g)
print('---')
for x in self.gem_list:
print(x)
给出输出:
10 g.p. Tiger Eye
35 g.p. Jasper
10 g.p. Rhodochrosite
120 g.p. Coral
35 g.p. Lapis Lazuli
14 g.p. Malachite
---
14 g.p. Tiger Eye
35 g.p. Jasper
14 g.p. Rhodochrosite
120 g.p. Coral
35 g.p. Lapis Lazuli
14 g.p. Malachite
似乎某些值正在设置给其他人,但是当我所做的只是将循环中创建的实例附加到列表中时,我不明白这是怎么回事。
关于可能导致此问题的任何想法?
我基本上想知道问题在于假设在循环中创建的每个实例都是唯一的,或者更确切地说它是否源于我代码中其他地方的东西。
编辑: 这是Gem类
class Gem():
def __init__(self):
base_idx = generateBaseValueIdx()
base_idx, value_mod = modifyBaseValue(base_idx)
self.value = BASE_VALUES[base_idx]
#determine type of gem
self.name, self.group = gemType(self.value)
#modified value
self.value.quantity = roundDownToNearest(self.value.quantity * value_mod, 1)
def __str__(self):
return '{} {} ({})'.format(self.value,self.name,self.group)
def __lt__(self,other):
return self.value < other.value