Noções Básicas de Type Hints
9 exemplos para você começar com type hints em Python - 6 básicos e 3 intermediários.
Busque em todas as páginas da documentação
9 exemplos para você começar com type hints em Python - 6 básicos e 3 intermediários.
uv add --dev mypy).Documente os tipos esperados em nomes e assinaturas.
name: str = "Ada"
count: int = 0
def greet(user: str) -> str:
return f"Hello, {user}"__annotations__ mas não impostas em tempo de execução.-> None documenta que não há valor de retorno útil.Relacionado: Genéricos Embutidos e de Coleção - list[int], dict[str, int]
Use genéricos embutidos para contêineres (3.9+).
users: list[str] = []
index: dict[str, int] = {}
unique: set[int] = set()list sem parâmetros significa lista não tipada para verificadores rigorosos.tuple[int, str].Relacionado: Genéricos Embutidos e de Coleção - Sequence, Mapping
Valores anuláveis usam união com None.
def find_user(user_id: int) -> dict | None:
return None
email: str | None = NoneOptional[str] é equivalente a str | None (estilo mais antigo).if x is not None antes do uso - verificadores refinam tipos.Optional quando None não for permitido.Relacionado: Optional, Union & o Operador | - narrowing
Verifique tipos estaticamente em CI.
uv run mypy src/# Trecho de pyproject.toml
[tool.mypy]
python_version = "3.14"
strict = false
warn_return_any = truestrict = true overrides.[tool.mypy] do pyproject.toml.Relacionado: Configuração de mypy & pyright - configuração completa
Combine verificações em tempo de execução com narrowing estático.
def handle(value: str | int) -> str:
if isinstance(value, str):
return value.upper()
return str(value * 2)isinstance ajuda mypy/pyright a refinar uniões.match/case também refina quando os padrões são específicos de tipo.Relacionado: Optional, Union & o Operador | - type guards
Any opta por não verificar - use com moderação.
from typing import Any
def legacy_bridge(payload: Any) -> dict[str, Any]:
assert isinstance(payload, dict)
return payloadAny é contagioso - retornos infectam chamadores.object quando qualquer valor for permitido, mas não operações arbitrárias.Any nas bordas do sistema ao longo do tempo.Tipa funções de ordem superior.
from collections.abc import Callable
def apply(fn: Callable[[int, int], int], a: int, b: int) -> int:
return fn(a, b)Callable[[ArgTypes], ReturnType] documenta a forma da função.ParamSpec preserva assinaturas de decoradores (avançado).Callable em vez de funções não tipadas em APIs públicas.Relacionado: Overloads & Tipos Callable - ParamSpec
Anote variáveis de instância e de classe.
class Counter:
total: int = 0
def __init__(self) -> None:
self.value: int = 0__init__.ClassVar marca atributos que não são substituídos em instâncias.Relacionado: dataclasses - campos tipados
Adicione tipos módulo por módulo.
# mypackage/service.py (tipado)
def compute(x: int) -> int:
return x + 1
# mypackage/legacy.py (não tipado por enquanto)
def legacy(): ...check_untyped_defs após cobertura de linha de base.# type: ignore[code] com moderação, com um comentário explicando o motivo.Relacionado: Estratégia de Tipagem Gradual - plano de implantação
Versões da Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026