# 序列协议
# 序列协议
在Python中,序列是指一种可以通过索引访问其中元素的数据类型,包括字符串、列表、元组等。序列协议定义了Python序列类型应该实现的一组标准接口,以便于在使用序列类型的过程中能够保持一致性和通用性。
Python序列协议要求序列类型实现以下特殊方法:
-
__len__(self):返回序列中元素的数量。 -
__getitem__(self, index):返回序列中指定位置的元素,其中index是元素的索引值,从0开始计数,也可以使用负数索引从序列末尾开始反向索引。 -
__setitem__(self, index, value):将序列中指定位置的元素设置为指定的值,其中index是元素的索引值,从0开始计数。 -
__delitem__(self, index):从序列中删除指定位置的元素,其中index是元素的索引值,从0开始计数。
此外,还有一些其他的方法可以使序列类型更加强大和灵活,例如:
-
__contains__(self, value):检查序列中是否包含指定的值。 -
index(self, value):返回序列中第一个与指定值匹配的元素的索引值。 -
count(self, value):返回序列中指定值的出现次数。
实现了序列协议的对象可以支持常见的序列操作,例如索引、切片、迭代、拼接等。这些操作可以使用通用的方式进行,无需关心序列类型的具体实现细节。
并且,通常并不需要实现所有方法,例如仅仅实现__getitem__(self, index)也可以实现迭代和切片,其中的缘由可以认为是Python的虚拟机会做一些“智能化的”检查。
class MySeq:
def __init__(self):
self.l = list(range(10))
def __getitem__(self, index):
return self.l.__getitem__(index)
seq = MySeq()
for i in seq:
print(i,end='-') # 0-1-2-3-4-5-6-7-8-9-
print('\n',seq[:-1]) # [0, 1, 2, 3, 4, 5, 6, 7, 8]
← 协议和鸭子类型 ClsProperty →