We recently discovered the following error in our project:
TypeError: descriptor '__weakref__' for 'XYZ' objects doesn't apply to a 'XYZ' object
XYZ in our case is a dataclass which uses slots (added v3.10) and weakref_slot (added v3.11) parameters.
We further investigated the error and have come to the following example to reproduce it:
importdataclassesimportweakref@dataclasses.dataclass(slots=True, weakref_slot=True)classEntityAsDataclass:
x: int=10classEntity:
__slots__= ("x", "__weakref__")
def__init__(self, x: int=10) ->None:
self.x=xe1=Entity()
e1_ref=weakref.ref(e1)
e2=EntityAsDataclass()
e2_ref=weakref.ref(e2)
asserte1.__weakref__ise1_ref# worksasserte2.__weakref__ise2_ref# fails with "TypeError: descriptor '__weakref__' for 'EntityAsDataclass' objects doesn't apply to a 'EntityAsDataclass' object"I don't know if this is intended, but we expect EntityAsDataclass and Entity to have the same behavior here.
Thanks!
Linked PRs
We recently discovered the following error in our project:
TypeError: descriptor '__weakref__' for 'XYZ' objects doesn't apply to a 'XYZ' objectXYZ in our case is a dataclass which uses slots (added v3.10) and weakref_slot (added v3.11) parameters.
We further investigated the error and have come to the following example to reproduce it:
I don't know if this is intended, but we expect EntityAsDataclass and Entity to have the same behavior here.
Thanks!
Linked PRs
__weakref__descriptor generation for custom dataclasses #102075__weakref__descriptor generation for custom dataclasses (GH-102075) #102662