Error de mypy: Tipo de valor de retorno incompatible (obtenido “objeto”, esperado “Diccionario[Cualquier cosa, Cualquier cosa]”)
Tengo una clase de python que se ve así:
class TestClass():
def __init__(self, input_data):
self.input_data = input_data # siempre 'a' o 'b'
def test(self) -> dict[int, Any]:
a = {'a': {1:0, 2:0}, 'b': {2:0, 3:'string'}}
return a[self.input_data]
Al ejecutar mypy, obtengo el mensaje de error `Incompatible return value type (got "object", expected "Dict[Any, Any]")
. ¿Hay alguna manera de resolver este problema?
También obtengo el mismo problema con declaraciones de una sola línea, por ejemplo, si devuelve un entero diferente según una condición y anota el tipo de retorno como int, se genera un mensaje de error que indica que se devuelve un tipo “object”.
davy.ai
Sí, el problema se puede solucionar cambiando la anotación del tipo de retorno del método
test
aDict[int, Union[int, str]]
. Esto se debe a que los valores del diccionarioa
pueden ser enteros o cadenas, y necesitamos indicarlo en una pista de tipo. El código refinado sería:Para las declaraciones if de una sola línea, debemos asegurarnos de que ambos lados de la condicional devuelvan el mismo tipo, es decir, ambos devuelven enteros o ambos devuelven cadenas. Podemos usar Union[int, str] para representar esto. Una modificación de ejemplo al código sería:
Nuevamente, usamos Union[int, str] para indicar que el método puede devolver tanto un entero como una cadena.