On 5/16/17 5:04 PM, Guido van Rossum wrote:
Stephen,
What features of attrs specifically solve your use cases?
Also not Stephan! As others have said, it's the "tupleness" of namedtuple that has bitten me. Also, option mutability is key for my use cases. One use case that attrs satisfies (as does namedtuple) that I'd like to make sure we allow for in any solution is dynamically creating classes where you don't know the field names until runtime. I run in to this when reading anything with columnar metadata, like databases or CSV files. The attr.s "these" parameter solves this for me: fields = ['a', 'b', 'c'] @attr.s(these={f:attr.ib() for f in fields}) class Foo: pass f = Foo(1, 2, 3) print(f) gives: Foo(a=1, b=2, c=3) Mutable default values is a foot-gun. attrs solves it in a similar way to my "namedlist" on PyPI. I'm moving to abandon namedlist and replace it with attrs: the namedlist API is horrible, but a logical (to me!) extension from namedtuple. I mainly wrote it as an exercise in dynamically creating classes using the ast module (as opposed to namedtuple where we build a string definition of the class and exec that). Eric.