python迭代器的问题

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)时,是没有执行的。可以将最后两行注释看下效果。

img

因为 self.__iter 并没有开始遍历
只有遍历了
for i in self.__iter:
pass
才调用__iter__方法

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632