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
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/