[Python-ideas] Add recordlcass to collections module
Eric V. Smith
eric at trueblade.com
Tue Sep 4 18:15:12 EDT 2018
On 9/4/2018 3:03 PM, Chris Barker via Python-ideas wrote:
> Chiming in here:
>
> dataclasses was just added to the stdlib.
>
> I understand that record class is not the same thing, but the use cases
> do overlap a great deal.
>
> So I think the cord goal for anyone that wants to see this in the stdlib
> is to demonstrate tbat recordclass
> Adds significant enough value to justify something so similar.
I've seen three things mentioned that might be different from dataclasses:
- instance size
- speed (not sure of what: instance creation? field access?)
- iterating over fields
But I've not seen concrete examples of the first two where dataclasses
doesn't perform well enough. For the third one, there's already a thread
on this mailing list: "Consider adding an iterable option to dataclass".
I'm contemplating adding it.
> Personally, I don’t see it.
I'm skeptical, too.
Eric
>
> -CHB
>
> On Tue, Sep 4, 2018 at 2:04 PM Zaur Shibzukhov <szport at gmail.com
> <mailto:szport at gmail.com>> wrote:
>
>
>
> ---
> /Zaur Shibzukhov/
>
>
> 2018-09-03 1:02 GMT+03:00 Wes Turner <wes.turner at gmail.com
> <mailto:wes.turner at gmail.com>>:
>
>
> On Sunday, September 2, 2018, Zaur Shibzukhov <szport at gmail.com
> <mailto:szport at gmail.com>> wrote:
>
>
>
> ---
> /Zaur Shibzukhov/
>
>
> 2018-09-02 22:11 GMT+03:00 Wes Turner <wes.turner at gmail.com
> <mailto:wes.turner at gmail.com>>:
>
> Does the value of __hash__ change when attributes of a
> recordclass change?
>
>
> Currently recordclass's __hash__ didn't implemented.
>
>
> https://docs.python.org/3/glossary.html#term-hashable
>
> https://docs.python.org/3/reference/datamodel.html#object.__hash__
>
> http://www.attrs.org/en/stable/hashing.html
>
>
> There is correction:
> recordclass and it's base memoryslots didn't implement __hash__, but
> memoryslots implement richcompare (almost as python's list).
>
>
> On Sunday, September 2, 2018, Zaur Shibzukhov
> <szport at gmail.com <mailto:szport at gmail.com>> wrote:
>
> As the author of `recordclass` I would like to shed
> some light...
>
> Recorclass originated as a response to the
> [question](https://stackoverflow.com/questions/29290359/existence-of-mutable-named-tuple-in-python/29419745#29419745)
> on stackoverflow.
>
> `Recordclass` was conceived and implemented as a
> type that, by api, memory and speed, would be
> completely identical to` namedtuple`, except that it
> would support an assignment in which any element
> could be replaced without creating a new instance,
> as in ` namedtuple`. Those. would be almost
> identical to `namedtuple` and support the assignment
> (` __setitem__` / `setslice__`).
>
> The effectiveness of namedtuple is based on the
> effectiveness of the `tuple` type in python. In
> order to achieve the same efficiency it was
> necessary to create a type `memoryslots`. Its
> structure (`PyMemorySlotsObject`) is identical to
> the structure of` tuple` (`PyTupleObject`) and
> therefore takes up the same amount of memory as` tuple`.
>
> `Recordclass` is defined on top of` memoryslots`
> just like `namedtuple` above` tuple`. Attributes are
> accessed via a descriptor (`itemgetset`), which
> supports both` __get__` and `__set__` by the element
> index.
>
> The class generated by `recordclass` is:
>
> `` `
> from recordclass import memoryslots, itemgetset
>
> class C (memoryslots):
> __slots__ = ()
>
> _fields = ('attr_1', ..., 'attr_m')
>
> attr_1 = itemgetset (0)
> ...
> attr_m = itemgetset (m-1)
>
> def __new __ (cls, attr_1, ..., attr_m):
> 'Create new instance of {typename} ({arg_list})'
> return memoryslots .__ new __ (cls, attr_1, ..., attr_m)
> `` `
> etc. following the `namedtuple` definition scheme.
>
> As a result, `recordclass` takes up as much memory
> as` namedtuple`, it supports quick access by
> `__getitem__` /` __setitem__` and by attribute name
> via the protocol of the descriptors.
>
> Regards,
>
> Zaur
>
> суббота, 1 сентября 2018 г., 10:48:07 UTC+3
> пользователь Martin Bammer написал:
>
> Hi,
>
> what about adding recordclass
> (https://bitbucket.org/intellimath/recordclass)
> to the collections module
>
> It is like namedtuple, but elements are writable
> and it is written in C
> and thus much faster.
>
> And for convenience it could be named as namedlist.
>
> Regards,
>
> Martin
>
>
> _______________________________________________
> Python-ideas mailing list
> Python... at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
>
> Code of Conduct:
> http://python.org/psf/codeofconduct/
>
>
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org <mailto:Python-ideas at python.org>
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
> --
>
> Christopher Barker, Ph.D.
> Oceanographer
>
> Emergency Response Division
> NOAA/NOS/OR&R (206) 526-6959 voice
> 7600 Sand Point Way NE (206) 526-6329 fax
> Seattle, WA 98115 (206) 526-6317 main reception
>
> Chris.Barker at noaa.gov <mailto:Chris.Barker at noaa.gov>
>
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
More information about the Python-ideas
mailing list