Python基础教程(第二版)例子程序__getitem__函数

Python基础教程例子9.3.1   使用第三版改写

写一个类,接受整数参数的索引,输出经过计算/调整后的value值。利用__getitem__函数实现。

有一件事要注意,python 3中只有int了,没有必要再写为:

    if not isinstance(key, (int,long)  ):#type(key) == int:#ss

 

类Fib:写一个斐波那契数列类,利用__getitem__函数返回使得这个类更像一个索引列表而不是一个普通类。

def checkIndex(key):
    '''
    为了能被接受,键应该是一个非负整数,如果不是一个整数,会引发error;
    如果是复数,引发IndexError
    '''
    if not isinstance(key, int):#type(key) == int:#ss
        raise TypeError
    if key <0:
        raise indexError

        
class ArithmeticSequence(object):
    def __init__(self,start=0,step=1):
        self.start = start
        self.step = step
        self.changed = {}
    
    def __getitem__(self, key):
        '''
        Get an item from the arithmetic sequence.
        '''
        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 # 保存更改后的值
    def __iter__(self):
        return self

class Fib(object):
    def __getitem__(self, n):
        a, b = 1, 1
        for x in range(n):
            a, b = b, a + b
        return a
    
s = ArithmeticSequence(1,2)

print(s[4])
        
s = Fib()
print(s[2])

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值