为我的类在Python 3中创建哈希表

0 投票
1 回答
1677 浏览
提问于 2025-04-17 19:46

我创建了一个包含多个成员的类。

我想创建一个哈希表,里面存放这个类的“对象”,并且能够进行搜索(也就是使用哈希映射 :))

我知道我应该重载 __eq__ 操作符。

接下来我该怎么做呢?

我找不到关于在Python中创建哈希表的任何参考资料……尤其是关于“我的类”的。

1 个回答

5

你需要实现 .__hash__() 方法.__eq__() 方法。

这个方法应该返回一个整数,对于任何两个对象,如果 .__eq__() 返回 True,那么 .__hash__() 必须 返回相同的整数值。

最简单的做法是使用内置的 hash() 函数,对你实例中每一个独特的属性进行处理,然后返回这些值的异或(XOR)结果。

示例:

class Foo(object):
    def __init__(self, bar, baz):
        self.bar = bar
        self.baz = baz

    def __eq__(self, other):
        if isinstance(other, type(self)):
            return self.bar == other.bar and self.baz == other.baz
        return False

    def __hash__(self):
        return hash(self.bar) ^ hash(self.baz)

演示:

>>> foo1 = Foo('ham', 'eggs')
>>> foo2 = Foo('ham', 'eggs')
>>> foo3 = Foo('spam', 'vikings')
>>> foo1 == foo2
True
>>> foo1 == foo3
False
>>> hash(foo1)
1838536788654183919
>>> hash(foo1) == hash(foo2)
True
>>> hash(foo1) == hash(foo3)
False
>>> mapping = {}
>>> mapping[foo1] = 'Monty Python'
>>> foo1 in mapping
True
>>> foo2 in mapping
True
>>> foo3 in mapping
False
>>> mapping[foo2]
'Monty Python'

撰写回答