GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — gh-90562: Support zero argument super with dataclasses when slots=True by ericvsmith · Pull Request #124455 · python/cpython

Conversation

@ericvsmith

@ericvsmith ericvsmith commented Sep 24, 2024 •
edited by github-actions Bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member
  • Issue: RFE: @dataclasses.dataclass(slots=True) doesn't support methods using zero-arg super() #90562

📚 Documentation preview 📚: https://cpython-previews--124455.org.readthedocs.build/

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

blhsing reacted with thumbs up emoji
All reactions
  • 👍 1 reaction
ericvsmith added 4 commits September 23, 2024 20:28
@ericvsmith
Fix zero-argument super() for dataclasses with slots=True.
aae4c72
@ericvsmith
Use assertIs instead of assertEqual for class comparisons. Add a test…
97d4f31
… showing that the original class, if saved, will have in incorrect __class__ value.
@ericvsmith
Fix default role.
c066fe2
@ericvsmith
Improved NEWS entry. Tweak some comments.
fbffc50
@bedevere-app bedevere-app Bot added the awaiting core review label Sep 24, 2024
@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
@bedevere-app bedevere-app Bot mentioned this pull request Sep 24, 2024
RFE: @dataclasses.dataclass(slots=True) doesn't support methods using zero-arg super() #90562
Closed
@ericvsmith
Merge branch 'main' into issue-90562-dataclasses-zero-argument-super
5e1cc0e
@ericvsmith ericvsmith self-assigned this Sep 24, 2024
@ericvsmith
Fix trivial typo in NEWS.
356beed
@ericvsmith
ericvsmith requested a review from carljm September 24, 2024 19:25
carljm
carljm reviewed Sep 24, 2024
View reviewed changes

@carljm carljm left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this!

There is the possible case where all methods of a class are decorated with opaque decorators that don't use functools.wraps, and thus we have no route to find the cell to update, and thus this approach simply fails. Should this case be mentioned in the tests? In the docs? Would it be worth explicitly introducing a __classcell__ member on classes through which the cell can reliably be accessed, so as to avoid this problem?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread Lib/test/test_dataclasses/__init__.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Lib/test/test_dataclasses/__init__.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Lib/test/test_dataclasses/__init__.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Lib/test/test_dataclasses/__init__.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Lib/test/test_dataclasses/__init__.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Lib/dataclasses.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Lib/test/test_dataclasses/__init__.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

ericvsmith
ericvsmith commented Sep 24, 2024
View reviewed changes

@ericvsmith ericvsmith left a comment

Copy link
Copy Markdown
Member Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the review, @carljm!

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread Lib/dataclasses.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Lib/test/test_dataclasses/__init__.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Lib/test/test_dataclasses/__init__.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread Lib/test/test_dataclasses/__init__.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

ericvsmith and others added 2 commits September 24, 2024 19:38
@ericvsmith @carljm
Apply suggestions from code review
c801c6d
Apply review suggestions.

Co-authored-by: Carl Meyer <[email protected]>
@ericvsmith
Address review comments: Only update one cell, then break out of the …
1c60e6b
…loop; minor change to comments; fix a test.
carljm
carljm approved these changes Sep 24, 2024
View reviewed changes

@carljm carljm left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

(Discussed in person that if people hit the "all methods use an opaque decorator" case, the answer is "fix the decorator to use functools.wraps")

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@bedevere-app bedevere-app Bot added awaiting merge and removed awaiting core review labels Sep 24, 2024
@ericvsmith
ericvsmith merged commit 5c6e3b7 into python:main Sep 25, 2024
@bedevere-app bedevere-app Bot removed the awaiting merge label Sep 25, 2024
@ericvsmith
ericvsmith deleted the issue-90562-dataclasses-zero-argument-super branch September 25, 2024 01:26
@Bobronium Bobronium mentioned this pull request Sep 27, 2024
gh-90562: Improve zero argument support for super() in dataclasses when slots=True #124692
Open
@danielhollas danielhollas mentioned this pull request Apr 11, 2026
gh-137855: Lazy import inspect module in dataclasses #144387
Merged
gpshead added a commit to gpshead/cpython that referenced this pull request Apr 12, 2026
@gpshead @Prometheus3375 @claude
[3.13] pythongh-105936: Properly update closure cells for `__setattr_…
aa1e00f
…_` 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 <[email protected]>
Co-authored-by: Sviataslau <[email protected]>
Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
@gpshead gpshead mentioned this pull request Apr 12, 2026
[3.13] gh-105936: Properly update closure cells for __setattr__ and __delattr__ in frozen dataclasses with slots (GH-144021) #148476
Merged
gpshead added a commit that referenced this pull request Apr 26, 2026
@gpshead @Prometheus3375
@JelleZijlstra @johnslavik
[3.13] gh-105936: Properly update closure cells for __setattr__ and _…
9651429
…_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 <[email protected]>
Co-authored-by: Sviataslau <[email protected]>
Co-authored-by: Jelle Zijlstra <[email protected]>
Co-authored-by: Bartosz Sławecki <[email protected]>
@hugovk hugovk mentioned this pull request Oct 30, 2026
gh-90562: Fix super() without args calls for dataclasses with slots #111538
Closed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@carljm carljm carljm approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@ericvsmith ericvsmith

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@ericvsmith @carljm
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.