Como / por que a sintaxe de dica de tipo Python funciona?
Acabo de ver o exemplo a seguir emPEP 484:
def greeting(name: str) -> str:
return 'Hello ' + name
print(greeting('Martin'))
print(greeting(1))
Como esperado, isso não funciona no Python 2:
File "test.py", line 1
def greeting(name: str) -> str:
^
SyntaxError: invalid syntax
No entanto, ele funciona para o Python 3:
Hello Martin
Traceback (most recent call last):
File "test.py", line 5, in <module>
print(greeting(1))
File "test.py", line 2, in greeting
return 'Hello ' + name
TypeError: Can't convert 'int' object to str implicitly
Isso foi inesperado. Na verdade, ele ainda não verifica os tipos, como você pode ver no exemplo a seguir (é executado, mas não gera uma exceção):
def greeting(name: str) -> int:
return 'Hello ' + name
print(greeting('Martin'))
Parece que depois do:
deve ser o nome de uma função, mas a função parece ser ignorada:
def aha(something):
print("aha")
return something+"!"
def greeting(name: aha, foo) -> int:
return 'Hello ' + name + foo
print(greeting('Martin', 'ad'))
O mesmo parece ser verdadeiro para o nome após->
.
Esse tipo de sugestão de sintaxe está usando outra coisa (como a linguagem Java Modeling utiliza comentários)? Quando essa sintaxe foi introduzida no Python? Existe uma maneira de verificar o tipo estático já com esta sintaxe? Ele sempre quebra a compatibilidade com o Python 2?