哈希自定义对象



hash((方法中的python方法可以将所有不变的对象与唯一的哈希值匹配。但是,我无法理解用户定义类的对象哈希((方法的行为。一些资源说,如果用户定义的类不包含__hash__()__eq__()方法,则该对象无法进行。另一方面,其他人声称相反。

换句话说,为了哈希自定义对象,__eq__()__hash__()方法的作用是什么?

如果您不实现__hash__,则hash()将使用默认实现。如果您不实现__eq__,则在比较两个实例时使用默认实现。

class C:
    pass
class D:
    def __hash__(self):
        return 1
    def __eq__(self, other):
        return True
print(hash(C()))  # changing for every C instance
print(C() == C()) # False since objects are different
print(hash(D()))  # always 1
print(D() == D()) # always True

基本上,'hash'应该很快,并充当"分类"计算,以了解两个对象是否相等。

" eq"应该恰恰是告诉对象是否肯定的函数 等于与否。也许这个Funciton必须执行很多检查(例如,如果您想通过所有成员字段的平等来定义对象的平等,也许其中有很多(

(

这两个函数的目的是有一种快速的方式来说"不,它们不相等"(哈希功能(,因为比较通常经常使用,而且大多数情况下不应该两个对象是"等于"。

您没有执行许多" eq"函数,而是执行大量快速"哈希"函数,如果两个哈希匹配,则执行" eq"以确认平等与否。

最新更新