class Kids():
def __init__(self, list_of_kids):
self.kids = list_of_kids
def __next__(self):
return 'kawabanga'
def __iter__(self):
return self
kid = Kids([1,2,3])
kids_iter = iter(kid)
print(kid)
print(kids_iter)
print(iter([1,2,3]))
我已经将上面的代码构建为一个例子。 我收到以下输出:
<__main__.Kids object at 0x102977b38>
<__main__.Kids object at 0x102977b38>
<list_iterator object at 0x102977be0>
据我所知:iter()
应该返回一个迭代器对象,但正如您在我输入函数iter()
时所看到的那样,对象Kids
会返回Kids
对象而不是迭代器对象。
当我在对象iter()
上调用Kids
时,能否解释一下为什么它不会返回迭代器对象?
答案 0 :(得分:3)
因为您从self
返回Kids.__iter__
而不是iterator
对象,而list
对象请{(1}})。
您的类 本身就是迭代器,因为它定义了list_iterator
和__iter__
。
相反,如果您想要在__next__
类的单独对象上处理迭代(并且有很多理由想要这样做),请创建一个Kids
对象来定义{{ 1}}和Kids_Iterator
并使__iter__
返回__next__
类的新实例。
答案 1 :(得分:1)
这是因为您在课堂上设置iter()
时会覆盖__iter__
行为。如您所见,您返回self,因此您基本上重新定义了iter(Kids)
所做的事情。
实现此目的的正确方法是yield
,而不是return
中的__iter__
。当然,如果你计划将它与for循环结合起来,那么这只是有意义的,这样你就可以迭代多个对象。否则__iter__
和__next__
只能为您提供一个对象实例。