Skip to content

multi-level hierarchies of TypedDict no longer return superclass elements in __annotations__ as of 3.14.0b1 when future annotations enabled #133701

Closed

Description

@zzzeek

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

Linked PRs

Activity

  1. added
    type-bugAn unexpected behavior, bug, or error
    on May 8, 2025
  2. added
    stdlibStandard Library Python modules in the Lib/ directory
    3.14bugs and security fixes
    on May 8, 2025
  3. added a commit that references this issue on May 9, 2025
  4. JelleZijlstra commented on May 9, 2025

    @JelleZijlstra
    Member

    Thanks, fix in #133772.

  5. added a commit that references this issue on May 14, 2025
  6. added a commit that references this issue on May 14, 2025
  7. added a commit that references this issue on May 14, 2025
  8. added a commit that references this issue on Jul 12, 2025
  9. added a commit that references this issue on Aug 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.14bugs and security fixesstdlibStandard Library Python modules in the Lib/ directorytopic-typingtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions