类的魔法方法之斐波那契数列演示

class Fib():
    def __init__(self):
        self.items=[0,1,1]
    def __call__(self,index):#类中定义一个该方法,实例就可以像函数一样调用
        return self[index]
    def __getitem__(self,index):#实现self[key]访问,序列对象,key接受整数为索引,或者切片
        if index < 0:
            return 'ERROR index'
        if index <len(self.items):
            return self.items[index]
        for i in range(len(self.items),index+1):
            self.items.append(self.items[i-1]+self.items[i-2])
        return self.items[index]
    def __str__(self):#str()函数,内建函数format(),print()函数调用
        return str(self.items)
    __repr__=__str__#对一个对象获取字符串表达,调用__repr__方法返回字符串表达,如果__repr__方法也没有定义,就直接返回object的定义,就是显示内存地址信息
    
fib=Fib()
print(fib(10),fib)
print fib
print(fib(10),fib(11))
print fib.__dict__

  结果

(55, [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
(55, 89)
{'items': [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]}

  

posted @ 2019-03-10 18:18  RealPython  阅读(180)  评论(0)    收藏  举报