在python中,如何使类成为生成器?

时间:2015-08-05 14:27:47

标签: python generator

我正在使用清漆4中的清漆API。它生成日志条目的方式是通过Dispatch反对它,并传入回调。简单版本:

class vlog(object):
    def __init__(self):
        self.body = []
    def callback(self, vap, cbd, priv):
        self.body.append(cbd)
    def main(self):
        self.vlog = varnishapi.VarnishLog(sopath="libvarnishapi.so")
        while True:
            ret = self.vlog.Dispatch(self.callback)
            if ret == 0:
                time.sleep(0.1)

我需要在self.callback中做更多的事情来正确地聚合数据,但无论如何。

我的真实问题是:如何将上述类转换为生成器?我的理想用法是这样的:

    vlog_inst = vlog()
    for log_aggregate in vlog_inst:
        pass

简单地说“收益率”'回调函数中的语句永远不会触发迭代。 (令我惊讶的是,添加yield语句也会导致我的所有打印语句也没有产生任何输出......我显然错过了一些东西。)

1 个答案:

答案 0 :(得分:0)

您希望您的课程可迭代。生成器是一种实现可迭代的方法,但不需要使类可迭代。

您可以实施__iter__方法;如果你使它成为生成器函数,你不需要任何其他东西:

def __iter__(self):
    while True:
        yield self.vlog.Dispatch(self.callback)