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