¿Puede sobrecargar la pista de tipos de retorno para un método en función del argumento pasado al constructor?
Digamos que tengo una clase como esta:
clase miclase:
def __init__ (self, param1: Tuple[str,...], param2: bool) -> None:
self.miembro1 = param1
self.miembro2 = param2
self.miembro3 = 10
def gimmie(self) -> int | Tuple[str,...]:
return self.miembro1 if self.miembro2 else self.miembro3
¿Hay alguna manera de asegurar que la devolución de gimmie no sea del tipo int | Tuple[str,...]
, sino que sea un int
o Tuple[str,...]
en su lugar?
Edit:
Hay un par de respuestas que involucran acrobacias significativas para hacer esto, cuando lo que realmente estaba buscando era hacer un “cast” de la devolución. Cada una de esas respuestas comenta sobre un “olor a código” debido a esto.
El problema es simplemente que construyo un objeto con un indicador y uno de los métodos devuelve 1 de 2 tipos según ese indicador. Si eso es un diseño deficiente, ¿cuál sería la forma “correcta” de hacerlo?
davy.ai
Sí, puedes usar
Union[int, Tuple[str, ...]]
en lugar deint | Tuple[str, ...]
en la sugerencia de tipo del métodogimmie
para asegurarte de que el tipo de retorno sea either unint
o unaTuple[str, ...]
. El código actualizado se vería así:El uso de
Union[int, Tuple[str, ...]]
te permite especificar una unión de tipos que el valor de retorno puede ser, en lugar de usar el operador|
, lo cual crea un tipo que representa la combinación de los dos tipos.