class Fib:
def __init__(self, nn):
self.__n = nn
self.__i = 0
self.__p1 = self.__p2 = 1
def __iter__(self):
print("Fib iter")
return self
def __next__(self):
self.__i += 1
if self.__i > self.__n:
raise StopIteration
if self.__i in [1, 2]:
return 1
ret = self.__p1 + self.__p2
self.__p1, self.__p2 = self.__p2, ret
return ret
class Class:
def __init__(self, n):
self.__iter = Fib(n)#这里执行Fib class,但 print("Fib iter")没有显示在output,什么原因
def __iter__(self):
print("Class iter")
return self.__iter;
object = Class(8)
for i in object:
print(i)
ouput:
Class iter
1
1
2
3
5
8
13
21
为什么 print("Fib iter")这条命令object不执行?
print("Class iter")
输出,是因为执行了(默认触发机制:for in)
for i in object:
__iter__
表明这个对象是迭代器。
在创建object = Class(8)时,是没有执行的。可以将最后两行注释看下效果。
因为 self.__iter 并没有开始遍历
只有遍历了
for i in self.__iter:
pass
才调用__iter__方法