class a(object):
w={'a':'aaa','b':'bbb'}
def __iter__(self):
return iter(self.w)
def next(self):#this is not be called
print 'sss'
for i in self.w:
return i
b=a()
for i in b:
print i
以及__iter__
和next
函数之间的关系是什么。
感谢
答案 0 :(得分:1)
在__iter__()
中,您返回存储在self.w
中的dict上的迭代器,而不是类本身。返回self
代替将解决此问题。
答案 1 :(得分:1)
我不完全确定你在问什么,但是next()
函数没有被调用,因为你从未明确地调用它。您定义__iter__
,当您这样做时会调用它:
for i in b:
这应该隐式调用迭代器的.next()方法,但迭代器不是a
,而是iter(self.w)
。由于您的对象不是迭代器,因此永远不会调用其next()
方法。
希望这有帮助。
答案 2 :(得分:1)
next
应该记住最后一个位置并返回下一个项目(并不总是返回第一个项目,就像在代码中一样),当没有其他项目时,请提出StopIteration
异常。< / p>
同样__iter__
应该返回类本身。
请参阅Python documentation for iterators。
在您的情况下,使用generator更合适:
class a(object):
w={'a':'aaa','b':'bbb'}
def __iter__(self):
print 'sss'
for i in self.w:
yield i
b=a()
for i in b:
print i