新手入门python,问题浅显,求大神解答

代码如下:#-*-coding:cp936-*-defcheckIndex(key):ifnotisinstance(key,(int,long)):raiseTypeE... 代码如下:
# -*- coding: cp936 -*-
def checkIndex(key):
if not isinstance(key,(int,long)):raise TypeError
if key<0:raise IndexError
class ArithmeticSequence:
def __init__(self,start=0,step=1):
self.start=start
self.step=step
self.changed={}
def __getitem__(self,key):
checkIndex(key)
try:return self.changed[key]
except KeyError:
return self.start+key*self.step
def __setitem__(self,key,value):
checkIndex(key)
self.changed[key]=value
>>> s=ArithmeticSequence(1,2)
>>> s[4]
9
>>> s[4]=2
这里为什么一开始就可以使用Key这个参数?
执行 s[4]=2的时候为什么知道要调用__setitem__?
展开
 我来答
百度网友f0f9883
2015-02-03 · TA获得超过317个赞
知道小有建树答主
回答量:258
采纳率:100%
帮助的人:150万
展开全部
1: 因为你在getitem里有个try
except KeyError:
return self.start+key*self.step start=1 step=2 自然 s[4]就会返回9
2:s[4]=2 等价于 s.__setitem__(4,2) 其实就是变相对 self.changed={} 这个字典进行操作
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式