有没有办法添加/修改使用yield创建的生成器的属性?

时间:2011-12-01 14:55:03

标签: python generator yield

所以我想制作一个arff reader(类似于csv文件格式)。

我想使用yield创建一个迭代器,但也要为这个迭代器添加属性。

例如:

data = arff.reader(my_fname)
print data.relation
for row in data:
    print row

但在读者定义中:

def reader(fname):
    reader.relation = fname # this is assigned to the function, not the generator
    yield 1
    yield 2

有没有办法使用yield来做到这一点,还是我坚持使用迭代器api?

1 个答案:

答案 0 :(得分:5)

你可以把它变成一个类。

class Reader(object): # Assuming Python <= 2.7
    def __init__(self, fname):
        self.fname = fname

    def __iter__(self):
        yield 1
        yield 2

r = Reader("some file")
print r.fname ## 'some file'
for line in r:
    print line ## 1 then 2