Bug report
Bug description:
using get_annotations() or accessing __annotations__ directly on a TypedDict subclass previously returned a dictionary of all attributes in the TypedDict hierarchy, now only returns for the sub-most class. only happens when from __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__ import annotations from typing import TypedDict import annotationlib class Base(TypedDict,total=False): a: int b: int class Sub(Base,total=False): c: float d: 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