0

我试图随机生成对象并将其附加到一个集合,但后来的代码以某种奇怪的方式表现,具有重复的对象(即,在调用 id(x) 时返回相同数字的对象)。我的问题是,在下面的代码中,“newanimal”始终是一个新实例,还是我在重复对象并更改它们?

from random import randint, choice
Animals_to_choose = [Passaro(), Sapo(), Rato(), Coelho(), Cobra(), Tartaruga(), Lobo()] 
someset = set()
n_animals_to_create = 10

for number in range(n_animais_to_create):
    newanimal = choice(Animals_to_choose)
    newanimal.number = number
    someset.add(newanimal)

需要指出的是,所有这些类都继承了这些定义:

def __hash__(self):
    return self.number
def __eq__(self, other):
    return self.number == other.number
4

1 回答 1

2

您应该像这样更改代码:

from random import randint, choice
Animals_to_choose = [Passaro, Sapo, Rato, Coelho, Cobra, Tartaruga, Lobo] 
someset = set()
n_animals_to_create = 10

for number in range(n_animals_to_create):
    newanimal = choice(Animals_to_choose)()
    newanimal.number = number
    someset.add(newanimal)

这里的想法是您希望选择集中的类,但您希望在每次对集合进行采样时实例化一个新类。

于 2013-11-13T17:44:53.753 回答