2016-08-02 1 views
3

On dirait que Mypy ne fait rien pour inférer les signatures. Est-ce exact? Par exemple:Mypy: pas d'inférence de signature?

# types.py 
def same_int(x: int) -> int: 
    return x 

def f(x): 
    y = same_int(x) 

    # This would be "Unsupported operand types for + ("int" and "str")" 
    # y + "hi" 

    return y 

f("hi") 
f(1) + "hi" 

Aucune plainte quand je fais ceci:

mypy --check-untyped-defs types.py 

Mypy fera l'inférence sur les expressions dans le corps de f (si --check-untyped-defs est activée). Je me demande s'il serait logique d'utiliser cela pour faire et appliquer des déductions à propos des signatures. (Et si ce n'est pas le cas, pourquoi pas.)

Répondre

3

C'est une décision de conception délibérée - Mypy a été conçu pour vous permettre de mélanger du code dynamique et typé, principalement pour faciliter la transition de bases de code importantes et variées + vous permettre de sélectivement gagner les avantages des deux. Par conséquent, les fonctions sans annotations de type sont traitées par défaut comme des fonctions typées dynamiquement et sont implicitement associées aux types de paramètre et de retour Any.