Skip to content

get_type_hints fails for dataclass in 3.14 #144190

@bfrandeen

Description

@bfrandeen

Bug report

Bug description:

This code works in 3.13, but fails in 3.14:

from dataclasses import dataclass
from typing import get_type_hints


@dataclass
class MyHintedClass:
    my_attr: int = 1

    def __init__(self):
        self.hints = get_type_hints(self)


my_class = MyHintedClass()
print(my_class.hints)

Failure in 3.14:

~\py\pybug: uv run --python=3.14 python main.py                                                                                                                                                                                                     
Traceback (most recent call last):
  File "C:\Users\bfrandeen\py\pybug\main.py", line 13, in <module>
    my_class = MyHintedClass()
  File "C:\Users\bfrandeen\py\pybug\main.py", line 10, in __init__
    self.hints = get_type_hints(self)
                 ~~~~~~~~~~~~~~^^^^^^
  File "C:\Users\bfrandeen\AppData\Roaming\uv\python\cpython-3.14.2-windows-x86_64-none\Lib\typing.py", line 2401, in get_type_hints
    hints = _lazy_annotationlib.get_annotations(obj, format=format)
  File "C:\Users\bfrandeen\AppData\Roaming\uv\python\cpython-3.14.2-windows-x86_64-none\Lib\annotationlib.py", line 996, in get_annotations
    raise TypeError(f"{obj!r} does not have annotations")
TypeError: MyHintedClass(my_attr=1) does not have annotations

Works in older versions:

~\py\pybug: uv run --python=3.13 python main.py
Using CPython 3.13.2
Removed virtual environment at: .venv
Creating virtual environment at: .venv
Installed 6 packages in 190ms
{'my_attr': <class 'int'>}

CPython versions tested on:

3.14, 3.13

Operating systems tested on:

Windows, Linux

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.14bugs and security fixes3.15new features, bugs and security fixesdocsDocumentation in the Doc dirtopic-typing

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions