python-type-safety
Ajuda seu agente a usar tipos de dados em Python para evitar erros. Torna o código mais seguro e fácil de entender.
O que ela faz
Ajuda você a escrever código Python mais confiável. Ele usa 'dicas de tipo' para que o computador possa verificar se você está usando os dados corretamente antes mesmo de executar o programa.
Quando usar
- ✓Ao adicionar verificações de tipo em um código que já existe.
- ✓Ao criar partes de código que podem ser usadas com diferentes tipos de dados.
- ✓Ao configurar ferramentas para verificar seu código Python automaticamente.
Exemplo do que pedir para a IA
“Como posso garantir que minha função sempre receba um número inteiro?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Você adiciona 'rótulos' (anotações de tipo) ao seu código para dizer qual tipo de dado cada parte deve ter. Ferramentas como mypy ou pyright leem esses rótulos e avisam se algo estiver errado.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add wshobson/agents --skill python-type-safetyOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/python-development/skills/python-type-safety/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Segurança de Tipos em Python
Utilize o sistema de tipos do Python para capturar erros em tempo de análise estática. Anotações de tipo servem como documentação forçada que as ferramentas validam automaticamente.
Quando Usar Esta Habilidade
- Adicionar dicas de tipo a código existente
- Criar classes genéricas e reutilizáveis
- Definir interfaces estruturais com protocolos
- Configurar mypy ou pyright para verificação rigorosa
- Entender o estreitamento de tipos e guardas
- Construir APIs e bibliotecas seguras quanto a tipos
Conceitos Principais
1. Anotações de Tipo
Declare os tipos esperados para parâmetros de função, valores de retorno e variáveis.
2. Genéricos
Escreva código reutilizável que preserva informações de tipo entre diferentes tipos.
3. Protocolos
Defina interfaces estruturais sem herança (duck typing com segurança de tipo).
4. Estreitamento de Tipos
Use guardas e condicionais para estreitar tipos dentro de blocos de código.
Início Rápido
def get_user(user_id: str) -> User | None:
"""Return type makes 'might not exist' explicit."""
...
# Type checker enforces handling None case
user = get_user("123")
if user is None:
raise UserNotFoundError("123")
print(user.name) # Type checker knows user is User here
Padrões Fundamentais
Padrão 1: Anotar Todas as Assinaturas Públicas
Toda função, método e classe pública deve ter anotações de tipo.
def get_user(user_id: str) -> User:
"""Retrieve user by ID."""
...
def process_batch(
items: list[Item],
max_workers: int = 4,
) -> BatchResult[ProcessedItem]:
"""Process items concurrently."""
...
class UserRepository:
def __init__(self, db: Database) -> None:
self._db = db
async def find_by_id(self, user_id: str) -> User | None:
"""Return User if found, None otherwise."""
...
async def find_by_email(self, email: str) -> User | None:
...
async def save(self, user: User) -> User:
"""Save and return user with generated ID."""
...
Use mypy --strict ou pyright em CI para capturar erros de tipo precocemente. Para projetos existentes, ative o modo rigoroso incrementalmente usando substituições por módulo.
Padrão 2: Usar Sintaxe Moderna de União
Python 3.10+ fornece uma sintaxe de união mais limpa.
# Preferred (3.10+)
def find_user(user_id: str) -> User | None:
...
def parse_value(v: str) -> int | float | str:
...
# Older style (still valid, needed for 3.9)
from typing import Optional, Union
def find_user(user_id: str) -> Optional[User]:
...
Padrão 3: Estreitamento de Tipos com Guardas
Use condicionais para estreitar tipos para o verificador de tipos.
def process_user(user_id: str) -> UserData:
user = find_user(user_id)
if user is None:
raise UserNotFoundError(f"User {user_id} not found")
# Type checker knows user is User here, not User | None
return UserData(
name=user.name,
email=user.email,
)
def process_items(items: list[Item | None]) -> list[ProcessedItem]:
# Filter and narrow types
valid_items = [item for item in items if item is not None]
# valid_items is now list[Item]
return [process(item) for item in valid_items]
Padrão 4: Classes Genéricas
Crie contêineres reutilizáveis seguros quanto a tipos.
from typing import TypeVar, Generic
T = TypeVar("T")
E = TypeVar("E", bound=Exception)
class Result(Generic[T, E]):
"""Representa um valor de sucesso ou um erro."""
def __init__(
self,
value: T | None = None,
error: E | None = None,
) -> None:
if (value is None) == (error is None):
raise ValueError("Exatamente um de value ou error deve ser definido")
self._value = value
self._error = error
@property
def is_success(self) -> bool:
return self._error is None
@property
def is_failure(self) -> bool:
return self._error is not None
def unwrap(self) -> T:
"""Obtém o valor ou levanta o erro."""
if self._error is not None:
raise self._error
return self._value # type: ignore[return-value]
def unwrap_or(self, default: T) -> T:
"""Obtém o valor ou retorna o padrão."""
if self._error is not None:
return default
return self._value # type: ignore[return-value]
# O uso preserva os tipos
def parse_config(path: str) -> Result[Config, ConfigError]:
try:
return Result(value=Config.from_file(path))
except ConfigError as e:
return Result(error=e)
…
Perguntas frequentes
O que são 'dicas de tipo'?
São como etiquetas que você coloca no seu código para indicar o tipo de dado esperado (ex: texto, número inteiro, número decimal). Elas ajudam o computador a entender e verificar seu código.
Por que usar isso se o Python é flexível?
A flexibilidade do Python pode levar a erros difíceis de encontrar. As dicas de tipo ajudam a pegar esses erros mais cedo, tornando seu código mais robusto e fácil de manter.
Preciso mudar todo o meu código?
Não necessariamente. Você pode começar adicionando dicas de tipo em partes importantes do seu código, como funções que outras pessoas usarão.
Detalhes
Descrição original do autor
Python type safety with type hints, generics, protocols, and strict type checking. Use when adding type annotations, implementing generic classes, defining structural interfaces, or configuring mypy/pyright.
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4936
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC