规则:

__hash__ 应该返回一个整数,hash()函数计算基础类型的hash值

可哈希集合:set(), forzenset(), dict() 三种数据结构操作要求 key 值唯一,判断唯一的方法是 hash 值。

自定义的类能否作为 key 值存在,要求自定义的类创建的对象为可哈希计算。

__hash__ 函数返回整数值,用来确定对象在哈希集合中的位置(哈希集合比喻为很多的桶,__hash__返回的是桶的位置)

__eq__ 函数用来当多个对象当__hash__值相同(来个对象要进入同一个桶)时,新来的对象能不能取代之前的对象(__eq__相等,不能取代,__eq__不等,可取代)。

规则:

只定义了:__eq__,则 __hash__ 被Python默认设置为 None

只定义了:__eq__,且类为可变,__hash__如果想定义则只能设置为None

定义了:__eq__,__hash__,类必须为不可变对象。

__eq__相等,__hash__必须相等,

__hash__相等,__eq__可以不等(后来的取代之前的)

05-23 11:49