想要成功的定制容器,我们首先要了解什么是协议。
协议(protocols)与其他编程语言中的接口很相似,它规定你哪些方法必须要定义。然而,在Python中的协议就显得不那么正式。事实上,在Python中,协议更像是一种指南、建议。
容器类型的协议:
①如果说你想定制的容器是不可变的话,你只需要定义__len__()和__getitem__()方法
②如果你希望定制的容器是可变的话,除了__len__()和__getitem__()方法,你还需要定义__setitem__()和__delitem__()两个方法
例子:编写一个不可改变的自定义列表,要求记录列表中每个元素被访问的次数
>>> class MyList:
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]
>>> c1 = MyList(1, 3, 5, 7)
>>> c1[1]
3
>>> c1[2]
5
>>> c1.count
{0: 0, 1: 1, 2: 1, 3: 0}