Как указать класс в качестве аннотации типа для полей этого же класса?
Как сослаться на Класс внутри самого себя?
@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]
Подробнее, см.:
- PEP-484 – Type Hints / The problem of forward declarations
- PEP-563 - Postponed Evaluation of Annotations / Implementation
Планировалось, такое отложенное исполнение аннотаций будет включено по умолчанию в версии Python 3.10 (см. issue), но изменения откатили из-за сломанной совместимости с такими библиотеками как Pydantic и FastAPI (см. комментарий к issue, pull request), это изменение отложили как минимум до Python 3.11.