如何在Python中创建元组的子类?

时间:2012-10-06 09:39:29

标签: python

我有一个类,它是tuple的子类。我想将该类的实例用作set的元素,但我得到的错误是它是一种不可用的类型。我想这是因为我已经覆盖了__eq____ne__方法。我该怎么做才能恢复我的类型的可持续性?我正在使用Python 3.2。

2 个答案:

答案 0 :(得分:3)

比较相等的对象应具有same hash value

因此,最好将哈希基于您用于比较相等性的属性

Adrien的例子会更好像这样

class test(tuple):
    def __eq__(self,comp):
        return self[0] == comp[0]
    def __ne__(self,comp):
        return self[0] != comp[0]
    def __hash__(self):
        return hash((self[0],))

只需利用包含我们关心的相等内容的元组的哈希值

答案 1 :(得分:2)

你需要将你的类型变为hashable,这意味着在你的类中实现派生自元组的__hash__()成员函数。

例如:

class test(tuple):
    def __eq__(self,comp):
        return self[0] == comp[0]
    def __ne__(self,comp):
        return self[0] != comp[0]
    def __hash__(self):
        return hash(self[0])

这就是现在的样子:

>>> set([test([1,]),test([2,]),test([3,])])
{(1,), (2,), (3,)}
>>> hash(test([1,]))
1

注意:您应该完全阅读__hash__()函数的文档,以便了解比较运算符和哈希计算之间的关系。