Python sempre foi uma linguagem fortemente tipada, para surpresa de muitos que confundem a tipagem dinâmica com a ausência de tipos. Na realidade, os tipos em Python funcionam tão bem e de forma tão automática que muitas vezes esquecemos que eles existem.
Mas nem tudo é perfeito. Hoje existem programas gigantescos escritos em Python e os programadores precisam de ferramentas poderosas para entender e navegar neste código. Aí tínhamos um problema, pois ferramentas de edição mais avançadas com recursos de autocomplete (intellisense), refactoring e simplesmente de navegação no código fonte se tornaram extremamente complexas. Dadas as propriedades dinâmicas da linguagem, escrever este tipo de ferramentas para o programador Python se tornou uma tarefa complicada. Cada ferramenta era responsável por inferir o tipo de cada método ou função sendo chamada e esta não é uma tarefa simples, uma vez que temos poucas indicações de tipo no programa em si.
Sensível a necessidade de melhores ferramentas, o criador da linguagem, o neerlandês Guido van Rossum e outros resolveram adotar o que chamaram de tipagem gradual (gradual typing), permitindo o uso de anotações opcionais para indicar os tipos esperados, formalizando o trabalho iniciado pela PEP3107 Function Annotations (de Collin Winter e Tony Lownds) com a PEP483 The Theory of Type Hints (Guido van Rossum e Ivan Levkivskyi) e a PEP484 Type Hints (Guido van Rossum, Jukka Lehtosalo e Lukasz Langa). Embora a PEP3107 esteja disponível desde a versão 3.0 do interpretador Python, a PEP484 foi disponibilizada apenas a partir da versão 3.5. Interessante foi a interação do trabalho de Jukka Lehtosalo que começou a desenvolver uma variante da linguagem Python chamada de mypy-lang. Nesta variante, Jukka utilizava anotações de tipos para facilitar a geração de código nativo. O que ele ainda não estava sabendo era que seu trabalho despertaria o interesse do próprio criador da linguagem, Guido van Rossum para resolver um problema que ele tinha quase há duas décadas! Eu uma apresentação feita na PyCon US de 2016, eles explicam o histórico da ferramenta e vários casos de uso. Em 2013, Guido convence Jukka de tornar a mypy-lang compatível com o Python 3.0. Em 2014 eles começam a trabalhar na PEP484 que foi finalmente aceita em maio de 2015. O resultado é que podemos usar o mypy como um analisador de código estático, capaz de validar os tipos que utilizamos em nossos programas escritos em Python, com ou sem as anotações de tipos.
[...]