К сожалению, объекты генератора (результаты, возвращаемые при вызове функции генератора) не поддерживают добавление произвольных атрибутов. Вы можете обойти это в некоторой степени, используя внешний дикт, индексируемый объектами генератора, поскольку такие объекты можно использовать как ключи к диктовке. Итак, где бы вы хотели сделать, скажите:
a = filter(23)
b = filter(45)
...
a.foo = 67
...
x = random.choice([a,b])
if hasattr(x, 'foo'): munge(x.foo)
вместо этого вы можете:
foos = dict()
a = filter(23)
b = filter(45)
...
foos[a] = 67
...
x = random.choice([a,b])
if x in foos: munge(foos[x])
Для всего, что угодно, используйте класс вместо генератора (в конце концов, один или несколько методов класса могут быть генераторами).