-
-
Notifications
You must be signed in to change notification settings - Fork 32.5k
gh-135228: When @dataclass(slots=True) replaces a dataclass, make the original class collectible (take 2) #137047
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…ke the original class collectible (python#136893) An interesting hack, but more localized in scope than python#135230. This may be a breaking change if people intentionally keep the original class around when using `@dataclass(slots=True)`, and then use `__dict__` or `__weakref__` on the original class. Co-authored-by: Alyssa Coghlan <ncoghlan@gmail.com>
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.
Can we check that this is a Python class? Should we clear the whole class dict or set it to NULL for the case if there are more descriptors?
Maybe we can check that it's a heap type?
I'm not aware of other descriptors that could cause problems. It's better to minimize the amount of changes we make to the class, because there are edge cases where the class is still accessible after the dataclass transformation is applied. |
Co-authored-by: Petr Viktorin <encukou@gmail.com> Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
@encukou @serhiy-storchaka could you review again and approve if you're satisfied, so that we can get this fixed in 3.14? |
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 can't find any issues in the PR; this is pretty much is the local optimum.
But, I can't tell if there will be unintended consequences. This PR feels quite risky for a RC fix.
Docs-wise: the notes/comments shouldn't imply that the original class is guaranteed to be garbage collected -- something else could still keep it alive.
This is a redo of #136893 without relying on a hack to get to the type dictionary.