gh-105936: Properly update closure cells for `__setattr__` and `__delattr__` in frozen dataclasses with slots by Prometheus3375 · Pull Request #144021 · python/cpython

@Prometheus3375

@Prometheus3375

@Prometheus3375

Prometheus3375

@Prometheus3375 Prometheus3375 changed the title gh-135228: Properly update closure cells for __setattr__ and __detattr__ in frozen dataclasses with slots gh-105936: Properly update closure cells for __setattr__ and __detattr__ in frozen dataclasses with slots

Jan 22, 2026

@Prometheus3375

@Prometheus3375

JelleZijlstra

JelleZijlstra

vstinner

@gpshead gpshead changed the title gh-105936: Properly update closure cells for __setattr__ and __detattr__ in frozen dataclasses with slots gh-105936: Properly update closure cells for __setattr__ and __delattr__ in frozen dataclasses with slots

Apr 12, 2026

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request

Apr 12, 2026
…`__delattr__` in frozen dataclasses with slots (pythonGH-144021)

(cherry picked from commit 8a398bf)

Co-authored-by: Sviataslau <35541026+Prometheus3375@users.noreply.github.com>

gpshead pushed a commit to miss-islington/cpython that referenced this pull request

Apr 12, 2026
…`__delattr__` in frozen dataclasses with slots (pythonGH-144021)

(cherry picked from commit 8a398bf)

Co-authored-by: Sviataslau <35541026+Prometheus3375@users.noreply.github.com>

gpshead pushed a commit that referenced this pull request

Apr 12, 2026
… `__delattr__` in frozen dataclasses with slots (GH-144021) (#148469)

gh-105936: Properly update closure cells for `__setattr__` and `__delattr__` in frozen dataclasses with slots (GH-144021)
(cherry picked from commit 8a398bf)

Co-authored-by: Prometheus3375 <prometheus3375@gmail.com>
Co-authored-by: Sviataslau <35541026+Prometheus3375@users.noreply.github.com>

gpshead added a commit to gpshead/cpython that referenced this pull request

Apr 12, 2026
…_` and `__delattr__` in frozen dataclasses with slots (pythonGH-144021)

pythongh-105936: Properly update closure cells for `__setattr__` and `__delattr__` in frozen dataclasses with slots (pythonGH-144021)
(cherry picked from commit 8a398bf)

The cherry-pick required additional changes beyond the original commit
because 3.13 lacks the `__class__` closure cell fixup machinery that
was added in 3.14 by pythonGH-124455 (pythongh-90562). Specifically:

- Backported `_update_func_cell_for__class__()` helper function and the
  closure fixup loop in `_add_slots()` from pythonGH-124455. Without these,
  renaming the closure variable from `cls` to `__class__` has no effect
  because nothing updates the cell when the class is recreated with slots.
- Changed `_add_slots()` to use `newcls` instead of reusing `cls` for the
  recreated class, so both old and new class references are available for
  the fixup loop.
- Replaced `assertNotHasAttr` with `assertFalse(hasattr(...))` in tests
  (assertNotHasAttr was added in 3.14).
- Dropped `test_original_class_is_gced` additions (that test does not
  exist on 3.13; it was added by pythonGH-137047 for pythongh-135228 which was not
  backported to 3.13).

Co-authored-by: Prometheus3375 <prometheus3375@gmail.com>
Co-authored-by: Sviataslau <35541026+Prometheus3375@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

prakashsellathurai added a commit to prakashsellathurai/cpython that referenced this pull request

Apr 13, 2026

@prakashsellathurai