Closed
Description
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:
import dataclasses import weakref @dataclasses.dataclass(slots=True, weakref_slot=True) class EntityAsDataclass: x: int = 10 class Entity: __slots__ = ("x", "__weakref__") def __init__(self, x: int = 10) -> None: self.x = x e1 = Entity() e1_ref = weakref.ref(e1) e2 = EntityAsDataclass() e2_ref = weakref.ref(e2) assert e1.__weakref__ is e1_ref # works assert e2.__weakref__ is e2_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!