[Python-Dev] Dataclasses and correct hashability
Glenn Linderman
v+python at g.nevcal.com
Mon Feb 5 03:54:49 EST 2018
More information about the Python-Dev mailing list
Mon Feb 5 03:54:49 EST 2018
- Previous message (by thread): [Python-Dev] Dataclasses and correct hashability
- Next message (by thread): [Python-Dev] Dataclasses and correct hashability
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 2/5/2018 12:11 AM, Nathaniel Smith wrote: > On Sun, Feb 4, 2018 at 11:28 PM, Glenn Linderman <v+python at g.nevcal.com> wrote: >> This is an interesting use case. I haven't got the internals knowledge to >> know just how just different mutable and immutable classes and objects are >> under the hood. But this use case makes me wonder if, even at the cost of >> some performance that "normal" immutable classes and objects might obtain, >> if it would be possible to use the various undisciplined initialization >> patterns as desired, followed by as declaration "This OBJECT is now >> immutable" which would calculate its HASH value, and prevent future >> mutations of the object? > It would be technically possible to support something like > > @dataclass(freezable=True) > class Foo: > blah: int > > foo = Foo() > # Initially, object is mutable, and hash(foo) raises an error > foo.blah = 1 > assertRaises(hash, foo) > > # This method is automatically generated for classes with freezable=True > foo.freeze() > > # Now object is immutable, and hash(foo) is allowed > assertRaises(foo.__setattr__, "blah", 2) > hash(foo) > > I don't know if it's worth the complexity, but I guess it would cover > at least some of the use cases Guido raised. > > -n > Thanks, Nathaniel, for confirming that what I was suggesting is not impossible, even if it turns out to be undesirable for some reason, or unwanted by anyone else. But I have encountered a subset of the use cases Guido mentioned, and had to make a 2nd class to gather/hold the values of the eventual immutable class, before I could make it, because pieces of the data for the class values were obtained from different sources at different times. Once all collected, then the immutability could be obtained, the rest of the processing performed. Thrashes the allocator pretty well doing it that way, but the job got done. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20180205/4feb9e3d/attachment.html>
- Previous message (by thread): [Python-Dev] Dataclasses and correct hashability
- Next message (by thread): [Python-Dev] Dataclasses and correct hashability
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list