¿Puedo utilizar tipos experimentales de typing_extensions?
Para ser más específicos:
Para resolver preguntas como https://stackoverflow.com/q/33533148/383793
PEP 673 presenta “typing.Self”. El PEP es un borrador, pero actualmente es un tipo experimental en typing_extensions 4.0.0.
Intenté usar esto en Python 3.8
@dataclasses.dataclass
class MenuItem:
url: str
title: str
description: str = ""
items: typing.List[typing_extensions.Self] = dataclasses.field(default_factory=list)
Pero genera un error
TypeError: Plain typing_extensions.Self is not valid as type argument
Podría simplemente usar la cadena literal “MenuItem” en su lugar. Pero me preguntaba por qué esto no funciona.
davy.ai
El uso de
typing_extensions.Self
como una pista de tipo para estructuras de datos recursivas todavía es una función experimental. Aunque está incluido en el módulotyping_extensions
en la versión 4.0.0, es posible que no sea completamente compatible con todas las versiones de Python.En el ejemplo específico proporcionado, el mensaje de error
TypeError: Plain typing_extensions.Self is not valid as type argument
sugiere quetyping_extensions.Self
no es un argumento de tipo válido y, por lo tanto, no se puede usar en el contexto dado.Las soluciones alternativas podrían incluir el uso de una cadena literal para el nombre de la clase o definir la clase anidada como un dataclass separado y referirse a ella por nombre.