Módulo 2 - Tipagem estática
Type hints: o contrato explícito
9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Anotar parâmetros e retorno com a sintaxe nome: tipo e -> tipo.
- Entender que o Python não impõe os tipos em tempo de execução.
- Anotar variáveis e usar os tipos básicos int, str, float, bool.
- Perceber como os type hints documentam o contrato da função.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Type hints: o contrato explícito.
Os objetivos desta aula. Anotar parâmetros e retorno com a sintaxe nome: tipo e -> tipo. Entender que o Python não impõe os tipos em tempo de execução. Anotar variáveis e usar os tipos básicos int, str, float, bool. Perceber como os type hints documentam o contrato da função.
Veja o essencial, parte por parte.
A sintaxe dos type hints. Anota-se um parâmetro com nome: tipo, por exemplo idade: int.
Tipos básicos e anotação de variáveis. Os tipos mais simples são os próprios tipos embutidos: int para inteiros, float para decimais, str para texto, bool para verdadeiro ou falso.
O que o Python faz com as anotações. Anotar valor: float não impede alguém de passar um texto em tempo de execução.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
A sintaxe dos type hints
Um type hint é uma anotação que diz qual tipo você espera. A sintaxe é direta: depois do nome do parâmetro você escreve dois pontos e o tipo, e depois da lista de parâmetros você usa uma seta para anotar o retorno. Nada além disso muda na função. Ela continua rodando igual, porque o Python lê essas anotações e as guarda, mas não obriga o valor a seguir o tipo. É por isso que os type hints são chamados de gradual typing: você adiciona onde quer, na medida em que quer.
def area_retangulo(base: float, altura: float) -> float:
return base * altura
def saudar(nome: str, formal: bool = False) -> str:
if formal:
return f"Prezado(a) {nome}"
return f"Oi, {nome}"
print(area_retangulo(3.0, 4.0)) # 12.0
print(saudar("Ana")) # Oi, Ana
print(saudar("Dr. Silva", True)) # Prezado(a) Dr. SilvaParâmetros anotados com : tipo e retorno com -> tipo. O default convive com o hint.
Repare que um parâmetro com valor padrão convive com a anotação: escreve-se formal: bool = False, ou seja, o tipo vem antes do sinal de igual. A ordem é sempre nome, depois tipo, depois valor padrão. Essa é a base de tudo que vem a seguir no módulo; os tipos mais elaborados, como listas de inteiros ou valores opcionais, apenas trocam a parte do tipo por algo mais expressivo.
Tipos básicos e anotação de variáveis
Os tipos mais simples são os próprios tipos embutidos: int para inteiros, float para decimais, str para texto, bool para verdadeiro ou falso. Você também pode anotar uma variável, não só um parâmetro, escrevendo o nome, dois pontos e o tipo. Isso é útil quando o valor inicial não deixa o tipo óbvio, ou quando você quer declarar uma variável antes de atribuir. O mypy usa essas anotações para conferir o resto do código.
total: int = 0
nome: str = "Ana"
preco: float = 19.9
ativo: bool = True
# Anotar sem atribuir de imediato tambem vale:
resultado: float
resultado = total * preco
print(resultado) # 0.0Variáveis anotadas com : tipo. A anotação pode vir antes da atribuição.
Sem type hints
- def calcular(a, b): você adivinha os tipos
- O erro de tipo só aparece ao rodar, se aparecer
- O editor sugere pouco sobre o parâmetro
- O contrato mora na sua cabeça ou num comentário
Com type hints
- def calcular(a: float, b: float) -> float: tipos explícitos
- O mypy aponta a incoerência antes de rodar
- O editor autocompleta com base no tipo
- O contrato está na própria assinatura, verificável
O que o Python faz com as anotações
Vale insistir neste ponto porque ele confunde muita gente. Em tempo de execução, o Python não verifica os type hints. Se você anotar idade: int e passar o texto trinta, o programa roda até algo dar errado por outro motivo. As anotações ficam guardadas no atributo __annotations__ da função e servem para três públicos: você, que lê o contrato; o editor, que autocompleta e avisa; e o mypy, que confere sem rodar. Nenhum deles muda o comportamento em execução.
Essa separação é saudável. O type hint cuida da coerência do seu código: garantir que uma função que espera número não receba texto por engano de outra parte do programa. A validação de dados de fora, como o que vem de um formulário, continua sendo trabalho seu, com ifs e mensagens claras. Um não substitui o outro. Com essa base firme, a próxima aula abre o módulo typing, que dá nomes a tipos mais ricos, como listas de inteiros e valores opcionais.
Teste rápido
O que o Python faz com um type hint como idade: int em tempo de execução?
Perguntas frequentes
- Type hints deixam o programa mais lento?
- Praticamente não. A anotação é processada quando a função é definida e guardada em __annotations__, um custo mínimo e único. Em tempo de execução o Python não fica verificando tipos, então o desempenho do corpo da função é o mesmo com ou sem anotações.
- Preciso anotar absolutamente tudo?
- Não. A tipagem em Python é gradual: você anota onde traz mais clareza, geralmente as assinaturas de funções e as estruturas de dados importantes. Variáveis locais óbvias, como um contador i = 0, raramente precisam de anotação. Comece pelas fronteiras entre partes do código.
- Qual a diferença entre float e int na anotação?
- int representa números inteiros, como 3 ou 42; float representa números com casas decimais, como 3.14. Ao anotar um preço ou uma média você costuma usar float; ao anotar uma quantidade de itens ou uma idade, int. O mypy avisa se você misturar de forma incoerente.
- Posso anotar o tipo de retorno como nada quando a função não retorna?
- Sim. Uma função que só executa uma ação e não devolve valor tem o retorno None. Anota-se com -> None, por exemplo def salvar(dado: str) -> None. Isso deixa claro que quem chama não deve esperar um valor de volta.
- O que é aquele __annotations__ que você mencionou?
- É um dicionário que o Python cria em cada função anotada, mapeando cada parâmetro e o retorno ao tipo declarado. Você quase nunca mexe nele à mão, mas é onde as anotações vivem. Ferramentas de tipos e algumas bibliotecas leem esse dicionário para trabalhar.
- Type hints funcionam em versões antigas do Python?
- A sintaxe básica existe desde o Python 3.5. Recursos mais novos, como escrever list[int] em vez de List[int] com letra maiúscula, chegaram no 3.9. Como o curso usa versões atuais, você pode escrever os tipos embutidos em minúsculas sem preocupação.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.