iterator on custom classes in python throws error in python
本问题已经有最佳答案,请猛点这里访问。
我是一个使用迭代器的名为queue的定制类wring。我在一个名为iterator.py的单独文件中有一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | from iterator import Iterator class Abstractstruc(object): def __init__(self): assert False def __str__(self): return"<%s: %s>" %(self.__class__.__name__,self.container) class Queue(Abstractstruc,Iterator): def __init__(self, objecttype=object): self.container=[] self.size=0 def add(self, data): self.container.append(data) def remove(self): self.container.pop(0) def __getitem__(self,index): return self.container[index] def __iter__(self): return Iterator(self.container) if __name__=='__main__': q=Queue(int) q.add(5) q.add(4) q.add(6) for i in q: print i |
迭代器
1 2 3 4 5 6 7 8 9 10 11 12 | class Iterator(object): def __init__(self, wrapped): self.wrapped = wrapped self.offset = 0 def __next__(self): if self.offset>=len(self.wrapped): raise StopIteration else: item = self.wrapped[self.offset] self.offset+=1 return item |
我收到这个错误消息
1 2 3 4 5 6 7 | <Queue: [5, 4, 6]> <Queue: [4, 6]> 4 Traceback (most recent call last): File"queue.py", line 78, in <module> for i in q: TypeError: iter() returned non-iterator of type 'Iterator' |
我不明白它为什么不返回迭代器。这里需要什么修复?
迭代器本身必须实现
这是因为
1 | def next(self): |