2

我有一堂课。

class Part:
    def __init__(self,name):
        self.name = name
        self.count = 0
    def __hash__(self):
        return hash(self.name)
    def __lt__(self,other):
        return self.count < other.count
    def __eq__(self,other):
        return self.name == self.count

我创建了一堆这样的对象,并用它们填充了一个列表。该列表最终包含重复项。我的代码中的一个段需要它,但是当需要输出时,我只想输出每个部分一次。所以我把它放在一个集合中。

uniqueParts = set(parts)

然后我迭代它以将其写入文件。

for part in uniqueParts:
    f.write(part.name+": "+str(part.count)+'\n')

这不起作用。它输出每个重复项。由于 uniqueParts 是一个集合,所以我的班级一定有问题,集合无法判断它们是重复的。

现在,我可以用几种不同的方式解决我的具体问题(重写类,这样我就不需要它了(数据可能太简单了,不值得拥有它自己的类)或者迭代并删除重复项,或者重新编写我的代码以便重复从来没有发生过)但是我将来可能会再次遇到这个问题,我想知道我需要做什么才能让 Sets 与我自己编写的类一起工作。

想法/帮助?

4

1 回答 1

9

这看起来不对:

def __eq__(self,other):
    return self.name == self.count

也许你的意思是:

def __eq__(self,other):
    return self.name == other.name
于 2012-11-21T14:58:47.263 回答