def check_index(key):
'''
检查指定的key是否是可接受的索引
key必须是非负整数,才是可接受的。
如果不是整数,将引发TypeError异常;
如果是负数,将引发IndexError异常,因为这个序列是无穷的
'''
if not isinstance(key, int ):raise TypeError
if key < 0: raise IndexError
class ArithmeticSequence:
def __init__(self, start = 0, step = 1):
'''
初始化这个算术序列
:param start: 指定第一个值,默认为0
:param step: 指定两个相邻值的差,默认为1
changed:一个字典,包含用户修改后的值
'''
self.start = start
self.step = step
self.changed = {} # 空字典表示没有任何元素被修改
def __setitem__(self,key,value):
# 修改算术序列中的元素
check_index(key)
self.changed[key] = value # 储存修改后的值
def __getitem__(self,key):
# 从算术序列中获取一个元素
check_index(key)
try:
return self.changed[key]
except KeyError:
'''
在Python中,当你使用a[key]这种方式从字典中获取一个值时,若字典中不存在这个key时就会产生一个KeyError的错误
'''
return self.start + key * self.step
s = ArithmeticSequence(1,2)
print(s[4])
添加回答
举报
0/150
提交
取消