Quiero escribir una definición de clase de datos en Python, pero no puedo hacer referencia a esa misma clase dentro de la declaración.
Principalmente, lo que quiero lograr es escribir esta estructura anidada, como se ilustra a continuación:
@dataclass class Category: title: str children: [Category] # I can't refer to a "Category" tree = Category(title='title 1', children=[ Category('title 11', children=[]), Category('title 12', children=[]) ])Puede envolver el nombre de la clase en una cadena para declarar hacia adelante la anotación:
from dataclasses import dataclass from typing import List @dataclass class Category: title: str children: List['Category'] Puede incluir una importación __future__ para que todas las anotaciones se declaren de forma predeterminada como se muestra a continuación. En este caso, también puede eliminar la importación de typing y usar anotaciones de nuevo estilo en Python 3.7 y superior.
from __future__ import annotations from dataclasses import dataclass @dataclass class Category: title: str children: list[Category]