我创建了一个包含多个成员的类。
我想创建哈希表,包含此类的“对象”并能够搜索(使用哈希图:))
据我所知,我应该重载__eq__
运算符
我应该从那里去什么?
我无法找到在 python 中创建哈希表的任何参考资料......尤其是“我的班级”
我创建了一个包含多个成员的类。
我想创建哈希表,包含此类的“对象”并能够搜索(使用哈希图:))
据我所知,我应该重载__eq__
运算符
我应该从那里去什么?
我无法找到在 python 中创建哈希表的任何参考资料......尤其是“我的班级”
您需要实现.__hash__()
方法以及.__eq__()
方法。
该方法应该返回一个整数,并且对于返回的任何两个对象,必须.__eq__()
返回相同的整数值。True
.__hash__()
完成此操作的最简单方法是对实例的每个属性使用内置hash()
函数,使其独一无二,并返回这些值的异或结果。
例子:
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'