relationship_writer: properly access __annotations__ dict#858
Closed
relationship_writer: properly access __annotations__ dict#858
Conversation
As of PEP 749 (Python 3.14), it is no longer possible to access __annotations__ on class instances. __annotations__ is now a descriptor that is only defined on `type` and not on `object`. Apparently, accessing __annotations__ on class instances was never supported in the first place: > Second, in previous versions of Python it was possible to access the __annotations__ attribute on instances of user-defined classes with annotations. However, this behavior was undocumented and not supported by inspect.get_annotations(), and it cannot be preserved under the PEP 649 framework without bigger changes, such as a new object.__annotations__ descriptor. This behavior change should be called out in porting guides. Note that making this code call `dataclasses.fields()` to get a list of fields is probably a better solution here, but I chose the most minimal change to get this working with Python 3.14. Feel free to close this and create a new PR if you prefer a different solution. Ref: https://peps.python.org/pep-0749/#metaclass-behavior-with-pep-649 Signed-off-by: Maxwell G <maxwell@gtmx.me>
7 tasks
|
@armintaenzertng gentle ping on this :) |
armintaenzertng
approved these changes
Dec 12, 2025
Contributor
|
@armintaenzertng gentle ping on this 🙏 |
Collaborator
|
Sorry for the delay! We had some trouble with the CI pipelines, but they seem to be working again :) I took the liberty to fix the issue in this #867, I hope you don't mind (I used the Thanks for the contribution, and again sorry for the delay! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
As of PEP 749 (Python 3.14), it is no longer possible to access
__annotations__on class instances.__annotations__is now a descriptor that is only defined ontypeand not onobject. Apparently, accessing__annotations__on class instances was never supported in the first place:Note that making this code call
dataclasses.fields()(or using the proper helper function in the stdlib to get type annotations) to get a list of fields is probably a better solution here, but I chose the most minimal change to get this working with Python 3.14. Feel free to close this and create a new PR if you prefer a different solution.Ref: https://peps.python.org/pep-0749/#metaclass-behavior-with-pep-649