Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.3k
Closed
Description
Bug report
Bug description:
usingget_annotations() or accessing__annotations__ directly on aTypedDict subclass previously returned a dictionary of all attributes in the TypedDict hierarchy, now only returns for the sub-most class. only happens whenfrom __future__ import annotations is used; when not used, then it works as previously. there's no workaround here because the typeddict subclass does not include declared superclasses in its__mro__.
from __future__importannotationsfromtypingimportTypedDictimportannotationlibclassBase(TypedDict,total=False):a:intb:intclassSub(Base,total=False):c:floatd:int# for both, py3.14.0a7 has all four, py3.14.0b1 has only c, d# py3.14.0a7: {'a': ForwardRef('int', module='__main__'), 'b': ForwardRef('int', module='__main__'), 'c': ForwardRef('float', module='__main__'), 'd': ForwardRef('int', module='__main__')}# py3.14.0b1: {'c': 'float', 'd': 'int'}print(Sub.__annotations__)print(annotationlib.get_annotations(Sub))# there's no way to traverse the ``__mro__`` of the Sub class to find# these annotations since Base is not there; prints# (<class '__main__.Sub'>, <class 'dict'>, <class 'object'>)print(Sub.__mro__)
CPython versions tested on:
3.14
Operating systems tested on:
No response