[Python-ideas] JavaScript-Style Object Creation in Python (using a constructor function instead of a class to create objects)
Eric V. Smith
eric at trueblade.com
Wed May 17 05:11:11 EDT 2017
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.
More information about the Python-ideas
mailing list