https://www.liaoxuefeng.com/wiki/1016959663602400/1017590712115904

iter

如果一个类想被用于for…in 循环,类似list或者tuple那样,就必须实现一个iter()方法,该方法返回一个迭代对象,然后Python的for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值,指导遇到StopIteration 错误时退出循环。

写一个Fib类,可以作用于for循环

  1. class Fib(object):
  2. def __init__(self):
  3. self.a, self.b = 0,1 #初始化两个计数器a,b
  4. def __iter__(self):
  5. return self #实例就是对象本身
  6. def __next__(self):
  7. self.a, self.b = self.b, self.a+ self.b
  8. if self.a > 100000:
  9. raise StopIteration()
  10. return self.a

使用:

  1. >>> for n in Fib():
  2. ... print(n)
  3. ...
  4. 1
  5. 1
  6. 2
  7. 3
  8. 5
  9. ...
  10. 46368
  11. 75025

getitem

如果要表现的像list那样按照下标取出元素,需要实现getitem()方法:

  1. class Fib(object):
  2. def __getitem__(self,n):
  3. a, b = 1, 1
  4. for x in range(n):
  5. a,b = b,a+b
  6. return a

…未完