Digamos que tengo dos tipos (uno de ellos genérico) como este
from typing import Generic, TypeVar T = TypeVar('T') class A(Generic[T]): pass class B: passY una unión de A y B así
C = A|BO, en la sintaxis anterior a Python-3.10/ PEP 604 :
C = Union[A,B] ¿Cómo tengo que cambiar la definición de C, para que C también sea genérico? por ejemplo, si un objeto es de tipo C[int] , es
A[int] (el parámetro de tipo se transmite) oB (el parámetro de tipo se ignora)Al volver a leer la documentación de mypy , creo que he encontrado mi respuesta:
Los alias de tipo pueden ser genéricos. En este caso, se pueden utilizar de dos formas: Los alias con subíndices son equivalentes a los tipos originales con variables de tipo sustituidas, por lo que el número de argumentos de tipo debe coincidir con el número de variables de tipo libre en el alias de tipo genérico. Los alias no suscritos se tratan como tipos originales con variables libres reemplazadas por Cualquiera
Entonces, para responder a mi pregunta:
C = A[T]|Bdebería hacer el truco. ¡Y lo hace!