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])