协议(Protocols)与其他编程语言中的接口相似,它规定你哪些方法必须要定义。然而,在python中的协议就不那么正式,它更像是一种指南。
容器类型的协议
一·定制不可变容器
需要定义:
__len__(self)
__getitem__(self,key)
__len__(self)
__getitem__(self,key)
定义一个自定义列表,要求该列表可以统计每个元素被访问的次数
class CountList:
def __init__(self,*args):
self.values = [x for x in args]
self.count = {}.fromkeys(range(len(self.values)),0)
def __len__(self):
return len(self.values)
def __getitem__(self,key):
self.count[key] += 1
return self.values[key]
二·定制可变容器
需要定义:
__len__(self)
__getitem__(self,key)
__setitem__(self,key,value)
__delitem__(self,key)
class CountList:
def __init__(self,*args):
self.value = [x for x in args]
self.count = {}.fromkeys(range(len(self.value)),0)
def __len__(self):
return len(self.value)
def __getitem__(self,key):
self.count[key] += 1
return self.value[key]
def __setitem__(self,key,value):
self.value[key]=value
def __delitem__(self,key):
del self.value[key]
for i in range(0,len(self.value)):
if i >= key:
self.count[i] = self.count[i+1]
self.count.pop(len(self.value))