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