JelleZijlstra · GitHub

and others added 5 commits

July 20, 2025 16:57
…ke the original class collectible
An interesting hack, but more localized in scope than python#135230.
This may be a breaking change if people intentionally keep the original class around
when using `@dataclass(slots=True)`, and then use `__dict__` or `__weakref__` on the
original class.

Closed

serhiy-storchaka

@encukou

encukou marked this pull request as ready for review

August 5, 2025 08:44

@encukou

ZeroIntensity

Merged

@encukou

Closed

JelleZijlstra

Merged

encukou

encukou

Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>

@encukou

@encukou

@encukou

Agent-Hellboy pushed a commit to Agent-Hellboy/cpython that referenced this pull request

Aug 19, 2025
…ct (pythonGH-136966)
This partially reverts python#137047, keeping the tests for GC collectability of the
original class that dataclass adds `__slots__` to.
The reference leaks solved there are instead solved by having the `__dict__` &
`__weakref__` descriptors not tied to (and referencing) their class.
Instead, they're shared between all classes that need them (within
an interpreter).
The `__objclass__` ol the descriptors is set to `object`, since these
descriptors work with *any* object. (The appropriate checks were already
made in the get/set code, so the `__objclass__` check was redundant.)
The repr of these descriptors (and any others whose `__objclass__` is `object`)
now doesn't mention the objclass.
This change required adjustment of introspection code that checks
`__objclass__` to determine an object's “own” (i.e. not inherited) `__dict__`.
Third-party code that does similar introspection of the internals will also
need adjusting.
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>

@mjp41 mjp41 mentioned this pull request

Dec 11, 2025

Merged

Read the original on github.com ↗