- __len__
内建函数len(),返回对象的长度(>=0),把对象当作容器类型看,如同list或dict,bool()函数调用的时候,如果没有__bool__()方法,则会看__len__()方法是否存在,存在返回非0为真
- __iter__ 迭代容器时调用,返回一个新的迭代器对象
- __containers__ in成员运算符,没有实现,就调用__iter__()方法遍历
- __getitem__ 实现self[key]访问,序列对象,key接受整数为索引,或者切片,对于set/dict,key为hashable, key不存在引发KeyError异常
- __setitem__ 和__getitem__类似,设置值的方法
- __misssing__ 字典使用__getitem__()调用时,key不存在执行
class Item:
def __init__(self,name,**kwargs):
self.name=name
self._spec=kwargs
def __repr__(self):
return '{} : {}'.format(self.name,self._spec)
class Cart:
def __init__(self):
self.items=[]
def __len__(self):
return len(self.items)
def additem(self,item):
self.items.append(item)
return True
def __repr__(self):
return 'cart: {}'.format(self.items)
def __add__(self,other):
print(other)
# if isinstance(other,Item):
self.items.append(other)
return self
def __iter__(self):
return iter(self.items)
def __getitem__(self,item):
return self.items[item]
def __missing__(self,key): # dict/set key missing
print(key)
def __setitem__(self,key,value):
self.items[key]=value
cart=Cart()
print(cart+2+3+5)
# print(len(cart))
# for b in cart: # 本质上调用next()
# print(b)
cart[1]=777
print(cart[1])
print(2 in cart)