定制序列

  协议(Protocols) 与其他编程语言中的接口很相似 , 他规定你哪些方法必须要定义. 然而在Python中的协议就显得不是那么的正式 . 事实上 , 在Python 中协议更像是一种指南 .

  如果你希望自己定制的容器是不可变的话 , 你只需要定义 __len__()和__getitem__() 方法. (定义长度和 取出就行)

  如果希望定制的容器是可变的话,你就需要再定义__setitem__()和__delitem__(两种方法.)

 1 # 定制一个不可改变的列表 并且记录每个元素的访问次数 .
 2 class CountList:
 3     def __init__(sef,*args): # 参数的数量可变.
 4         self.values=[x for x in args]   # 列表推导式
 5         self.count={}.fromkeys(range(len(self.values)),0)
 6 
 7     def __len__(self):
 8         return len(self.values)
 9 
10     def __getitem__(self,key):
11         self.count[key]+=1
12         return self.values[key]
13 
14 # 很巧妙的办法. 至少对于现在的我 看看这个收获还是可以的.
15 
16 # 类中有两个属性 一个是 value(列表) 一个是count(集合)
17 
18 # 当调用类 的时候的顺序 进入value , 并且这些元素的顺序符号进入count 并且打上 0的标记
19 
20 # 如果需要长度的话  就看value的长度就行
21 
22 # 如果需要元素的话  传入序号就行 , 传入序号的时候 将集合中该序号对应的 值 +1
 1 =============== RESTART: C:/Users/Administrator/Desktop/new.py ===============
 2 >>> c1=CountList(1,3,5,7,9)
 3 >>> c2=CountList(2,4,6,8,10)
 4 >>> c1
 5 <__main__.CountList object at 0x02EA99F0>
 6 >>> c1[1]
 7 3
 8 >>> c1.values
 9 [1, 3, 5, 7, 9]
10 >>> c1.count
11 {0: 0, 1: 1, 2: 0, 3: 0, 4: 0}
12 >>> c1[1]
13 3
14 >>> c1[1]
15 3
16 >>> c1.count
17 {0: 0, 1: 3, 2: 0, 3: 0, 4: 0}
18 >>> 
原文地址:https://www.cnblogs.com/A-FM/p/5682962.html