Как указать класс в качестве аннотации типа для полей этого же класса?

Как сослаться на Класс внутри самого себя?

@dataclass
class Place:
    parent: Place
    children: list[Place]
parent: Place

NameError: name 'Place' is not defined.

Ответы (1 шт):

Автор решения: insolor

Если используйте версию Python меньше 3.7, то нужно обернуть тип в кавычки:

@dataclass
class Place:
    parent: "Place"
    children: list["Place"]

Источник: PEP-484 – Type Hints / Forward references

Начиная с Python 3.7 можно включить отложенное исполнение (postponed evaluation) аннотаций с помощью импорта from __future__ import annotations:

from __future__ import annotations


@dataclass
class Place:
    parent: Place
    children: list[Place]

Подробнее, см.:

Планировалось, такое отложенное исполнение аннотаций будет включено по умолчанию в версии Python 3.10 (см. issue), но изменения откатили из-за сломанной совместимости с такими библиотеками как Pydantic и FastAPI (см. комментарий к issue, pull request), это изменение отложили как минимум до Python 3.11.

→ Ссылка