Loading

__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))

posted @ 2021-01-05 21:19  吃了好多肉  阅读(68)  评论(0编辑  收藏  举报