es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  ,

Answer

  1. Avatar for 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ódulo typing_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 que typing_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.

Comments are closed.