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

在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__=type
def 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__=type

class 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.count
3
>>> 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值