Description
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
Activity
pythongh-133701: Fix incorrect `__annotations__` on TypedDict defined…
__annotations__
on TypedDict defined under PEP 563 #133772JelleZijlstra commentedon May 9, 2025
Thanks, fix in #133772.
gh-133701: Fix incorrect `__annotations__` on TypedDict defined under…
pythongh-133701: Fix incorrect `__annotations__` on TypedDict defined…
__annotations__
on TypedDict defined under PEP 563 (GH-133772) #134003[3.14] gh-133701: Fix incorrect `__annotations__` on TypedDict define…