gh-90562: Support zero argument super with dataclasses when slots=True by ericvsmith · Pull Request #124455 · python/cpython

added 4 commits

September 23, 2024 20:28
… showing that the original class, if saved, will have in incorrect __class__ value.

@ericvsmith ericvsmith changed the title gt-90562: Support zero argument super with dataclasses when slots=True gh-90562: Support zero argument super with dataclasses when slots=True

Sep 24, 2024

@ericvsmith

@ericvsmith

carljm

ericvsmith

Apply review suggestions.

Co-authored-by: Carl Meyer <carl@oddbird.net>
…loop; minor change to comments; fix a test.

@ericvsmith ericvsmith deleted the issue-90562-dataclasses-zero-argument-super branch

September 25, 2024 01:26

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>