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?

questionAnswers(1)

yourAnswerToTheQuestion