从数据库查询初始化库中的itertools计数

时间:2013-08-31 15:06:01

标签: python class instantiation itertools

我有一个由我构建的项目使用的库。库中的一个类使用itertools在每次实例化时生成递增id(当前从1开始)。我希望能够根据使用该库的服务器守护程序的主循环中已知的id初始化库中的增量开始位置。这是当我启动和停止守护进程时,ID可以从它们停止的地方开始。守护进程可以使用对db后端的SQL查询来确定正确的起点,但我无法弄清楚如何将其传递到库中以用作起点。

目前来自图书馆:

class Thing(object):
    id_iter = itertools.count(1)
    def __init__(self):
        self.id = self.id_iter.next()

我想用一个可以在第一个实例化时传递给类的变量替换1。知道怎么样?一种不同的方法?

2 个答案:

答案 0 :(得分:0)

class Thing(object):
    id_iter = None
    def __init__(self, num=1):
        if Thing.id_iter is None:
            Thing.id_iter = itertools.count(num)
        self.id = next(self.id_iter)

示例:

x = Thing(5)
print(x.id)      #prints 5
y = Thing()
print(y.id)      #prints 6

答案 1 :(得分:0)

您可以使用itertools.islice开始(并停止)迭代任意索引。

>>> cycler = itertools.cycle(range(20))
>>> itertools.islice(cycler, 10, None).next()
10
>>> cycler.next()
11

如何在特定情况下使用它取决于可迭代类以及如何实例化它。