python:生成器对象上的属性

Jos*_*erg 6 python

是否可以在生成器对象上创建属性?

这是一个非常简单的例子:

def filter(x):
    for line in myContent:
        if line == x:
            yield x
Run Code Online (Sandbox Code Playgroud)

现在说我有很多这些过滤器生成器对象浮动...也许其中一些是匿名的...我想稍后再回来询问他们正在过滤的内容.有没有办法我可以a)询问生成器对象的x值或b)设置一个值为x的属性,我以后可以询问?

谢谢

S.L*_*ott 19

是.

class Filter( object ):
    def __init__( self, content ):
        self.content = content
    def __call__( self, someParam ):
        self.someParam = someParam
        for line in self.content:
            if line == someParam:
                yield line
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 7

不幸的是,生成器对象(调用生成器函数返回的结果)不支持添加任意属性.可以通过使用外部字典由发电机对象索引解决它在一定程度上,因为这样的对象可用作为键成一个字典.那么,你喜欢做的,说:

a = filter(23)
b = filter(45)
...
a.foo = 67
...
x = random.choice([a,b])
if hasattr(x, 'foo'): munge(x.foo)
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

foos = dict()
a = filter(23)
b = filter(45)
...
foos[a] = 67
...
x = random.choice([a,b])
if x in foos: munge(foos[x])
Run Code Online (Sandbox Code Playgroud)

对于任何爱好者来说,使用类而不是生成器(毕竟,类的一个或多个方法可以是生成器).