如何在Python中创建一个使用Sets的类?

时间:2012-11-21 14:57:01

标签: python set

我上课了。

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是一个集合,因此我的类必须出错,而Set无法判断它们是重复的。

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

思想/协助?

1 个答案:

答案 0 :(得分:9)

这看起来不对:

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

也许你的意思是:

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