18508410033 发表于 2020-3-22 22:32:28

python迭代器问题求助

在小甲鱼视频中说的
class Fib(object):
    def __init__(self):
      self.a, self.b = 0, 1

    def __iter__(self):
      return self

这个魔法方法__iter__没有看懂,为什么返回的是self,而不是iter(self)呢。

永恒的蓝色梦想 发表于 2020-3-23 10:22:36

iter(self)会调用self.__iter__(),这样就死循环了

zltzlt 发表于 2020-3-23 13:06:28

__iter__() 方法返回迭代器,当调用 iter(self) 就会调用 self.__iter__(),会形成死循环

18508410033 发表于 2020-3-23 21:07:47

zltzlt 发表于 2020-3-23 13:06
__iter__() 方法返回迭代器,当调用 iter(self) 就会调用 self.__iter__(),会形成死循环

但是这个方法在类中重写了,结果只是放回实例对象本身。这里很不理解这个,为什么是会返回迭代器呢。

zltzlt 发表于 2020-3-24 08:05:09

18508410033 发表于 2020-3-23 21:07
但是这个方法在类中重写了,结果只是放回实例对象本身。这里很不理解这个,为什么是会返回迭代器呢。

因为 self 就是迭代器啊

18508410033 发表于 2020-3-25 21:29:20

zltzlt 发表于 2020-3-24 08:05
因为 self 就是迭代器啊

是类中定义了__iter__ 和 __next__他的实例对象就是迭代器吗

zltzlt 发表于 2020-3-26 08:02:15

18508410033 发表于 2020-3-25 21:29
是类中定义了__iter__ 和 __next__他的实例对象就是迭代器吗

是的,只要定义了 __next__ 的方法就是迭代器,就有必要重写 __iter__ 方法,返回 self
页: [1]
查看完整版本: python迭代器问题求助