我有一个想要进行迭代的名为ObjectSet的类。它会在for循环后重置我的“指针”,但如果我中断循环则不会重置。
我的类ObjectSet具有在所附代码中定义的方法。我遍历一个对象集,当我找到一个特定的对象时,我中断了循环,但是我不知道在这种情况下如何以一种很好的方式重置指针。
class ObjectSet:
def __init__(self,objects = None):
if not objects: self.objects = []
else: self.objects = objects
self.pointer = 0
def __iter__(self):
return self
def __len__(self):
return len(self.objects)
def __next__(self):
cur_pointer = self.pointer
if cur_pointer >= len(self):
self.pointer = 0
raise StopIteration
self.pointer += 1
return self.objects[cur_pointer]
objs = ObjectSet([1,2,3])
for obj in objs:
if obj == 2:
break
for obj in objs:
print(obj)
该代码只打印3,但我希望它像列表一样打印1,2和3。
答案 0 :(得分:1)
您可以实现iterator pattern。
但是鉴于您的基本数据结构已经支持迭代,您可以这样做:
def __iter__(self):
return iter(self.objects)
(并从您的班级中删除__next__
方法和self.pointer
)。
设计的问题是,类self.pointer
的每个实例只有一个ObjectSet
。但正如您注意到的那样,只有返回的迭代器才应该记住下一个位置。这就是迭代器模式将为您完成的工作。