分别是 列表、元组、字符串
协议(Protocols)与其他编程语言中的接口相似,他规定了那些方法必须被定义。
在python中,协议更像是一种指南,例如鸭子类型,一只鸟像鸭子一样走,像鸭子一样叫,像鸭子一样游然后这只鸟就可以叫做鸭子。
如果希望定制的容器是不可变的,那么只需要定义__len__ 和__getitem__ 方法
如果希望定制的容器是可变的,那么还需要定义 __setitem__ 和__delitem__方法
_len__(self) |
定义当被 len() 调用时的行为(返回容器中元素的个数) |
__getitem__(self, key) |
定义获取容器中指定元素的行为,相当于 self[key] |
__setitem__(self, key, value) |
定义设置容器中指定元素的行为,相当于 self[key] = value |
__delitem__(self, key) |
定义删除容器中指定元素的行为,相当于 del self[key] |
class MyList: def __init__(self,*args): self.values = [x for x in args] self.count = {}.fromkeys(self.values,0) def __len__(self): return len(self.values) def __getitem__(self, key): if len(self.values): self.count[self.values[key]] += 1 return self.values[key] else: return '此列表为空,无法查询' c1 = MyList(1,3,5,7,9) c2 = MyList('a','b','c','d','e') c3 = MyList() print(c1[3]) # 输出 7 print(c1[3]) # 输出 7 print(c1.count) # 输出 {1: 0, 3: 0, 5: 0, 7: 2, 9: 0} print(c2[2]) # 输出 c print(c2.count) # 输出 {'a': 0, 'b': 0, 'c': 1, 'd': 0, 'e': 0} print(c3[0]) # 输出 此列表为空,无法查询