为什么在追加到列表时会修改实例的某些属性?

时间:2016-09-01 23:17:24

标签: python-3.x

我遇到的问题是,当我向列表添加实例时,实例属性会被意外更改。新的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

0 个答案:

没有答案