◐ Shell
clean mode source ↗

gh-148947: dataclasses: fix error on empty __class__ cell by JelleZijlstra · Pull Request #148948 · python/cpython

Also add a test demonstrating the need for the existing "is oldcls" check.

@johnslavik johnslavik changed the title gh-148947: dataclasses: fix crash on empty __class__ cell gh-148947: dataclasses: fix error on empty __class__ cell

Apr 24, 2026

johnslavik

@johnslavik johnslavik changed the title gh-148947: dataclasses: fix error on empty __class__ cell gh-148947: dataclasses: fix crash on empty __class__ cell

Apr 24, 2026

@johnslavik johnslavik changed the title gh-148947: dataclasses: fix crash on empty __class__ cell gh-148947: dataclasses: fix error on empty __class__ cell

Apr 24, 2026
Co-authored-by: Bartosz Sławecki <bartosz@ilikepython.com>

ljfp pushed a commit to ljfp/cpython that referenced this pull request

Apr 25, 2026
…on#148948)

Also add a test demonstrating the need for the existing "is oldcls" check.

Co-authored-by: Bartosz Sławecki <bartosz@ilikepython.com>

JelleZijlstra added a commit that referenced this pull request

Apr 25, 2026
…148948) (#148995)

gh-148947: dataclasses: fix error on empty __class__ cell  (GH-148948)

Also add a test demonstrating the need for the existing "is oldcls" check.
(cherry picked from commit 6d7bbee)

Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Bartosz Sławecki <bartosz@ilikepython.com>

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

Apr 25, 2026
pythonGH-148948)

pythongh-148947: dataclasses: fix error on empty __class__ cell  (pythonGH-148948)

Also add a test demonstrating the need for the existing "is oldcls" check.
(cherry picked from commit 6d7bbee)

Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Bartosz Sławecki <bartosz@ilikepython.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

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

Apr 25, 2026
pythonGH-148948)

pythongh-148947: dataclasses: fix error on empty __class__ cell  (pythonGH-148948)

Also add a test demonstrating the need for the existing "is oldcls" check.
(cherry picked from commit 6d7bbee)

Consolidates the news entries given pythonGH-148947 bug was never present in the 3.13
branch

Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Bartosz Sławecki <bartosz@ilikepython.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

gpshead added a commit that referenced this pull request

Apr 26, 2026
…_delattr__ in frozen dataclasses with slots (GH-144021) (GH-148476)

gh-105936: Properly update closure cells for `__setattr__` and `__delattr__` in frozen dataclasses with slots (GH-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 GH-124455 (gh-90562). Specifically:

- Backported `_update_func_cell_for__class__()` helper function and the
  closure fixup loop in `_add_slots()` from GH-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 GH-137047 for gh-135228 which was not
  backported to 3.13).

gh-148947: dataclasses: fix error on empty __class__ cell  (GH-148948)

Also add a test demonstrating the need for the existing "is oldcls" check.
(cherry picked from commit 6d7bbee)

---------

Co-authored-by: Prometheus3375 <prometheus3375@gmail.com>
Co-authored-by: Sviataslau <35541026+Prometheus3375@users.noreply.github.com>
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Bartosz Sławecki <bartosz@ilikepython.com>