On Sunday, September 2, 2018, Zaur Shibzukhov <szp...@gmail.com> wrote:
> > > --- > *Zaur Shibzukhov* > > > 2018-09-02 22:11 GMT+03:00 Wes Turner <wes.tur...@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 > >> On Sunday, September 2, 2018, Zaur Shibzukhov <szp...@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/exis >>> tence-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...@python.org >>>> https://mail.python.org/mailman/listinfo/python-ideas >>>> Code of Conduct: http://python.org/psf/codeofconduct/ >>>> >>> >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/