__len__和__hash__

__len__(self)

内置函数len(obj)的原理就是触发对象所属类的__len__方法,该方法返回值必须为整型,len()拿到的就是该方法的返回值。

class F:
    def __len__(self):
        # 返回对象的属性数量
        return len(self.__dict__)

f = F()
f.name = 'libai'
print(len(f))  # 1

__hash__(self)

内置函数hash(obj)的原理就是触发对象所属类的__hash__方法,该方法返回值必须为整型,hash()拿到的就是该方法的返回值。

作用:如果一个对象不可hash,通过重写__hash__让它变得可哈希。

class Person:
    def __hash__(self):
        return hash(self.name)

p = Person()
p.name = 'libai'
print(hash(p))

原文地址:https://www.cnblogs.com/ChiRou/p/14238021.html