再利用;i、 例如,在类中的python数据生成器流中继续

再利用;i、 例如,在类中的python数据生成器流中继续,python,object,stream,generator,Python,Object,Stream,Generator,我编写了下面的示例类,它具有一个生成器——在本例中是一个范围对象 class tmp(): def _setgen(self): self.gen = range(1,5) def __init__(self): self._setgen() # I define my generator only once; here in the __init__() def getval(self): for g in sel

我编写了下面的示例类,它具有一个生成器——在本例中是一个范围对象

class tmp():

    def _setgen(self):
        self.gen = range(1,5)

    def __init__(self):
        self._setgen() # I define my generator only once; here in the __init__()

    def getval(self):

        for g in self.gen: # use the afore defined `gen`
            print(g)
            if g > 2:
                break


t = tmp() # init the object; including the range within the object

t.getval() # As expected numbers 1,2,3

t.getval() # Expect Number 4; but get again 1,2,3
为什么要重置范围对象?我想继续,我在休息时停了下来。 因此,对
t.getval()
的第二次调用应该打印一个4,而不是从一开始就对新的(?)范围对象进行操作

为了达到我的“期望行为”,什么是一种变通方法

我会成功的
gen
应该是
范围
上的迭代器,如果您想将其保持为状态

每次调用时,
getval
中的
for
循环将
范围
包装在一个新的
iter
中。

“它具有一个生成器——在本例中是一个范围对象。”
range
对象不是生成器。它们甚至不是迭代器(要亲自查看,请尝试
next(range(10))
。它们是可重用的,因此每次对它们进行迭代时,它都使用一个新的独立迭代器
self.gen = iter(range(1, 5))