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
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...@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/
--
---
You received this message because you are subscribed to a topic in the Google Groups "python-ideas" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/python-ideas/8C9iVJsba5A/unsubscribe.
To unsubscribe from this group and all its topics, send an email to python-ideas...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
On 8/10/2018 7:01 PM, Neil Girdhar wrote:
[...][...]
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).
@data(iterable=True) class Point: x: int y: int origin = Point(0, 0) x, y = origin