python的容器类型有:
序列类型(list, tuple, str), 映射类型(dict)都是属于容器类型,里面存放的是各种各样的对象
容器类型的协议:
1.定制不可变容器类型: 例如tuple和str
需要定义__len__()和__getitem__()两个魔法方法
2.定制可变容器类型:例如:list. dict, set
除了__len__()和__getitem__()两个魔法方法之外,还需要定义__setitem__()和__delitem__()两个魔法方法
len(self): 被len()调用时返回容器中元素的个数
getitem(self, key): 获取容器中指定元素的行为,相当于self[key], 就像列表的操作_list[1]
setitem(self, key): **设置 **容器中指定元素的行为,相当于self[key] = value
delitem(self, key): **删除 **容器中指定元素的行为,相当于del self[key]
此外实现了__getitem__()方法的class可以像迭代器一样去迭代,等同于实现了__iter__()和__next__()方法
class CountList:
def __init__(self, *args):
self.values = [x for x in args]
def __len__(self):
return len(self.values)
def __getitem__(self, key):
return self.values[key]
c1 = CountList(1, 3, 5, 7, 9)
for i in c1:
print(i)
1
3
5
7
9