https://www.liaoxuefeng.com/wiki/1016959663602400/1017590712115904
iter
如果一个类想被用于for…in 循环,类似list或者tuple那样,就必须实现一个iter()方法,该方法返回一个迭代对象,然后Python的for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值,指导遇到StopIteration 错误时退出循环。
写一个Fib类,可以作用于for循环
class Fib(object):
def __init__(self):
self.a, self.b = 0,1 #初始化两个计数器a,b
def __iter__(self):
return self #实例就是对象本身
def __next__(self):
self.a, self.b = self.b, self.a+ self.b
if self.a > 100000:
raise StopIteration()
return self.a
使用:
>>> for n in Fib():
... print(n)
...
1
1
2
3
5
...
46368
75025
getitem
如果要表现的像list那样按照下标取出元素,需要实现getitem()方法:
class Fib(object):
def __getitem__(self,n):
a, b = 1, 1
for x in range(n):
a,b = b,a+b
return a
…未完