Python——基本的序列和映射规则

来源:互联网 发布:好看的手机壁纸软件 编辑:程序博客网 时间:2024/06/10 11:51

在Python中有一些类似于init的特殊方法,例如:getitem(self,key)、setitem(self,key,value)、len(self)、delitem(self,key)等。
len(self):返回集合中所含项目的数量,若是序列返回的是元素的个数,若是映射关系集合,返回的则是键值对的数量。
getitem(self,key):返回键对应的值,若对象是一个序列,键是一个0—N-1的整数,若是映射关系,键可以是任何数据类型。
setitem(self,key,value):存储键对应的值,通过getitem_(self,key)方法可以访问该值。
delitem(self,key):删除键对应的元素值。
案例如下:自定义一个序列类型,在序列初始化的时候可以指定增量的步长,当向列表查询元素时,getitem函数会首先判断查询的下标是否是整型元素,若不是则会则会报类型错误。若是整型元素且该下标对应的值存在于列表中则会输出该元素值,若不在列表中则会根据规定的计算规则计算该下标索引对应的元素值并记录到列表索引对应的位置。

# _*_ coding:utf-8 _*___metaclass__=typedef checkIndex(index):    if not isinstance(index,(int)):        raise TypeError    if index < 0:        raise IndexError class creatSeq:    def __init__(self,start=0,step=1):        self.start=start        self.step=step        self.seq={}    def __getitem__(self,index):        checkIndex(index)        try:            return self.seq[index]        except KeyError:            return self.start+index*self.step    def __setitem__(self,index,value):        checkIndex(index)        self.seq[index]=value运算结果:=========RESTART:C:\Users\Mr_Deng\Desktop\test.py=========>>> s=creatSeq(1,2)>>> s[5]11>>> s[5]=5>>> s[5]5>>> 

有时 我们需要自定一个数据类型,但是为了避免全部重新编写代码可以直接使用现有的数据类型,既通过super操作和上面所说的基本序列和映射规则来增加自定义操作。例如,记录list表中元素访问的次数,可以通过super继承list,并在getitem的操作中记录元素被访问的次数,案例如下:

# _*_ coding:utf-8 _*___metaclass__=typeclass countList(list):    def __init__(self,*args):        super(countList,self).__init__(*args)        self.count=0    def __getitem__(self,index):        self.count+=1        return super(countList,self).__getitem__(index)运算结果:================= RESTART: C:\Users\Mr_Deng\Desktop\test.py =================>>> l1=countList(range(10))>>> l1[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> del l1[0:3]>>> l1[3, 4, 5, 6, 7, 8, 9]>>> l1[2]+l1[2]+l1[3]16>>> l1.count3>>> 
0 0
原创粉丝点击