[Python-ideas] Consider adding an iterable option to dataclass
Eric V. Smith
eric at trueblade.com
Fri Aug 10 20:29:37 EDT 2018
On 8/10/2018 7:01 PM, Neil Girdhar wrote:
> It would be nice if dataclasses
> (https://docs.python.org/3/library/dataclasses.html#dataclasses.dataclass)
> had an option to make them a sequence. This would make
>
> dataclass(frozen=True, order=True, sequence=True)
>
> an optionally-typed version of namedtuple. It would almost totally
> supplant it except that namedtuples have a smaller memory footprint.
Note that type.NamedTuple already gives you typed namedtuples.
Admittedly the feature set is different from dataclasses, though.
> sequence would simply inherit from collections.abc.Sequence and
> implement the two methods __len__ and __getitme__.
Unless I'm misunderstanding you, this falls in to the same problem as
setting __slots__: you need to return a new class, in this case since
you can't add inheritance after the fact. I don't think
__isinstancecheck__ helps you here, but maybe I'm missing something (I'm
not a big user of inheritance or ABCs).
Not that returning a new class is impossible, it's just that I didn't
want to do it in the first go-round with dataclasses.
For slots, I have a sample @add_slots() at
https://github.com/ericvsmith/dataclasses/blob/master/dataclass_tools.py.
Maybe we could do something similar with @add_sequence() and test it
out? It would have to be a little more sophisticated than @add_slots(),
since it would need to iterate over __dataclass_fields__, etc.
I'm on vacation next week, maybe I'll play around with this.
Eric
More information about the Python-ideas
mailing list