找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3752|回复: 3

[已解决] 特殊方法__getitem__和__setitem__一点疑问帮忙解答下

5

主题

10

帖子

10

积分

贫民

积分
10
井陉小张 发表于 2016-12-5 20:51:03 | 显示全部楼层 |阅读模式
>>> def checkIndex(key):
        if not isinstance(key,(int,long)):raise TypeError
        if key<0:raise IndexError

        
>>> class ArithemeticSequence(object):
        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=ArithemeticSequence(1,2)
>>> s[4]                             #这里我查到是相当于s.__getitem__(4)
9

>>>s.__setitem__(4,20)   #这里我想问一下 这个怎么简写呢,用什么可以替代呢????
>>> s[4]
20                                    


回复

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang 发表于 2016-12-6 23:05:38 | 显示全部楼层
这个很简单
s[4] = 20

这样就可以啦
因为你设置了这个方法:
  1. def __setitem__(self,key,value):
  2.     checkIndex(key)
  3.     self.changed[key]=value
复制代码
回复 支持 反对

使用道具 举报

5

主题

10

帖子

10

积分

贫民

积分
10
井陉小张  楼主| 发表于 2016-12-7 19:03:41 | 显示全部楼层
blueelwang 发表于 2016-12-6 23:05
这个很简单
s[4] = 20

谢谢
回复 支持 反对

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang 发表于 2016-12-7 22:47:37 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表