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-89687: fix get_type_hints with dataclasses __init__ generation by Tishka17 · Pull Request #137168 · python/cpython

Conversation

@Tishka17

@Tishka17 Tishka17 commented Jul 28, 2025 •
edited by bedevere-app Bot
Loading

Uh oh!

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

Copy link
Copy Markdown

Fixes for #89687
Based on original #29158

  • Issue: Cross-module dataclass inheritance breaks get_type_hints #89687

Sorry, something went wrong.

Uh oh!

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

All reactions
@Tishka17
Tishka17 requested a review from ericvsmith as a code owner July 28, 2025 14:18
@python-cla-bot

python-cla-bot Bot commented Jul 28, 2025 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown

All commit authors signed the Contributor License Agreement.

CLA signed

All reactions

Sorry, something went wrong.

Uh oh!

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

@bedevere-app bedevere-app Bot added the awaiting review label Jul 28, 2025
@bedevere-app

bedevere-app Bot commented Jul 28, 2025

Copy link
Copy Markdown

Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool.

If this change has little impact on Python users, wait for a maintainer to apply the skip news label instead.

All reactions

Sorry, something went wrong.

Uh oh!

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

@bedevere-app bedevere-app Bot mentioned this pull request Jul 28, 2025
Cross-module dataclass inheritance breaks get_type_hints #89687
Open
@Tishka17
Tishka17 force-pushed the issue-45524 branch from bef5cf2 to 3a449ba Compare July 28, 2025 14:32
@Tishka17
pythongh-89687: fix get_type_hints with dataclasses __init__ generation
132c74b
@Tishka17
Tishka17 force-pushed the issue-45524 branch from 3a449ba to 132c74b Compare July 28, 2025 14:39
@Tishka17

Tishka17 commented Jul 28, 2025

Copy link
Copy Markdown
Author

As I see at this point:

  1. annotationlib.get_annotations does not resolve ForwardRef at all
  2. typing.get_type_hints ignores module in ForwardRef
All reactions

Sorry, something went wrong.

Uh oh!

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

@Tishka17
Fix using forward module in ForwardRef
3ff28d2
@Tishka17
Tishka17 requested a review from JelleZijlstra as a code owner July 28, 2025 15:58
JelleZijlstra
JelleZijlstra reviewed Jul 28, 2025
View reviewed changes
Comment thread Lib/annotationlib.py

arg = self.__forward_arg__
if arg.isidentifier() and not keyword.iskeyword(arg):
if self.__forward_module__ is not None:

@JelleZijlstra JelleZijlstra Jul 28, 2025

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.

I don't think this is correct, since we infer globals from __forward_module__ if no explicit globals are given. And if explicit globals are given, we shouldn't be using __forward_module__.

Sorry, something went wrong.

Uh oh!

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

All reactions

@Tishka17 Tishka17 Jul 28, 2025

Copy link
Copy Markdown
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.

I don't think current behavior is correct. Was there any discussion?

Sorry, something went wrong.

Uh oh!

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

All reactions
JelleZijlstra
JelleZijlstra reviewed Jul 30, 2025
View reviewed changes
Comment thread Lib/dataclasses.py
# Return the text of the line in the body of __init__ that will
# initialize this field.

if f.init and isinstance(f.type, str):

@JelleZijlstra JelleZijlstra Jul 30, 2025

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.

Something like this is good, but I'd do it like this:

diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py
index 53b3b54cfb3..e3d25fb0840 100644
--- a/Lib/dataclasses.py
+++ b/Lib/dataclasses.py
@@ -789,7 +789,10 @@ def _get_field(cls, a_name, a_type, default_kw_only):
 
     # Only at this point do we know the name and the type.  Set them.
     f.name = a_name
-    f.type = a_type
+    if isinstance(a_type, str):
+        f.type = annotationlib.ForwardRef(a_type, owner=cls)
+    else:
+        f.type = a_type
 
     # Assume it's a normal field until proven otherwise.  We're next
     # going to decide if it's a ClassVar or InitVar, everything else

ForwardRef now lives in annotationlib, not typing. There's no need to catch SyntaxError as it doesn't parse its input in the constructor.

Sorry, something went wrong.

Uh oh!

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

All reactions
@github-actions

github-actions Bot commented Apr 27, 2026

Copy link
Copy Markdown

This PR is stale because it has been open for 30 days with no activity.

All reactions

Sorry, something went wrong.

Uh oh!

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

@github-actions github-actions Bot added the stale Stale PR or inactive for long period of time. label Apr 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@JelleZijlstra JelleZijlstra JelleZijlstra left review comments
@ericvsmith ericvsmith Awaiting requested review from ericvsmith ericvsmith is a code owner

Uh oh!

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

Assignees

No one assigned

Labels

awaiting review stale Stale PR or inactive for long period of time.

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

@Tishka17 @JelleZijlstra
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.