与构造函数一起列出,行为是什么?

2024-06-29 01:14:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图随机生成对象并将其附加到一个集合,但后来的代码以某种奇怪的方式运行,具有重复的对象(即,调用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

Tags: to对象代码selfnumberreturndefcreate
1条回答
网友
1楼 · 发布于 2024-06-29 01:14:09

您应该这样更改代码:

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)

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

相关问题 更多 >