为了账号安全,请及时绑定邮箱和手机立即绑定

下列代码中,s = ArithmeticSequence(1,2)先调用的是哪个函数,setitem和getitem哪个先调用?

下列代码中,s = ArithmeticSequence(1,2)先调用的是哪个函数,setitem和getitem哪个先调用?

MADAO7 2018-05-22 16:56:49
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])
查看完整描述

4 回答

?
李东岳

TA贡献10条经验 获得超1个赞

这个问题,其实你可以简单采用print调试一下就可以看得出。
1.类的实例化第一步调用init构造函数,
2.根据提供的参数会调用setitem.此时字典才实现赋值,
3.最后s4调用函数字典取数,这里面实现的魔术方法就是getitem

查看完整回答
反对 回复 2018-05-23
?
MADAO7

TA贡献1条经验 获得超0个赞

先调用init,s[4]调用getitem,最后调用setitem

查看完整回答
反对 回复 2018-05-22
  • 4 回答
  • 0 关注
  • 1606 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信