协议是什么:
协议与其他编程语言中的接口很相似,它规定你哪些方法必须要定义。然而,在Python中的协议就显得不那么正式。事实上,在Python中,协议更像是一种指南。
序列类型:列表,元组,字符串,字符串,或者映射类型: 字典。这两种都属于容器类型,因为它们里面都存放着各种各样的对象。
容器类型的协议:
希望容器不可变, 只需要__len__() __getitem__()
希望容器可变,除了__len__() __getitem__(), 还需要__setitem__() __delitem__()
练习:
编写一个不可改变的自定义列表,要求记录列表中每个元素被访问的次数
代码如下:
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]
结果如下: