Implémente les annotations de type Python modernes, le typage structurel avec les Protocols et des modèles de sécurité de type pour un code robuste.
- Étoiles GitHub
- 81
- Fichiers
- 9
- Dernier commit
- 7 nov. 2026
- Licence
- MIT
- Outils autorisés
- 2
Que fait la skill python-typing-ops ?
python-typing-ops est une agent skill. Implémente les annotations de type Python modernes, le typage structurel avec les Protocols et des modèles de sécurité de type pour un code robuste.
Résumé généré à partir du SKILL.md de la skill.
À propos du skill python-typing-ops
L'implémentation des annotations de type Python modernes et des modèles de typage structurel est ce que ce SKILL permet aux développeurs qui construisent des bases de code sûres et documentées. Il fournit un ensemble complet d'outils pour appliquer des annotations de type, des génériques et du typage structurel via les Protocols afin de garantir la fiabilité du code. Lorsqu'un agent charge ce SKILL, il peut générer ou refactoriser du code en utilisant des fonctionnalités avancées telles que TypeVar, TypedDict et les types Literal.
Le SKILL prend en charge la syntaxe Python 3.10+, y compris les types d'union, ainsi que des modèles spécifiques pour Python 3.11+ tels que Self et TypeVarTuple. Il aide à configurer et à exécuter des vérificateurs de type comme mypy et pyright pour valider l'intégrité du code. En utilisant ces modèles, les développeurs peuvent aller au-delà des annotations de base pour implémenter une logique complexe comme les TypeGuards pour l'affinement de type (type narrowing) et le typage structurel pour des définitions d'interface flexibles. Cela en fait un outil essentiel pour quiconque cherche à réduire les erreurs d'exécution grâce à l'analyse statique.
Ce qu'un agent peut faire avec
- 1Implémenter le typage structurelDéfinir un Protocol pour permettre à n'importe quel objet possédant une méthode spécifique d'être passé à une fonction.
- 2Définir des dictionnaires à clés fixesCréer un TypedDict pour garantir que l'accès aux dictionnaires utilise des clés spécifiques et sécurisées au niveau du type.
- 3Valider le code avec des vérificateurs de typeExécuter des commandes mypy ou pyright pour vérifier les erreurs de type dans un répertoire source.
Rédigé à partir du SKILL.md du skill. Chaque cas d'utilisation est vérifié par rapport à une citation de celui-ci.
Comment installer la skill python-typing-ops
Chaque commande copie le dossier de la skill dans le répertoire des skills du client. Redémarrez le client ou démarrez une nouvelle session pour la charger.Installer la skill python-typing-ops dans Plugin
/plugin marketplace add 0xDarkMatter/claude-mods /plugin install claude-mods@claude-mods
Installer la skill python-typing-ops dans Claude Code
~/.claude/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.claude/skills/python-typing-opsInstaller la skill python-typing-ops dans Claude Code (project)
.claude/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops .claude/skills/python-typing-opsInstaller la skill python-typing-ops dans Codex
~/.agents/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.agents/skills/python-typing-opsInstaller la skill python-typing-ops dans Gemini CLI
~/.gemini/skills/python-typing-ops/SKILL.md
$ npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.gemini/skills/python-typing-opsInstaller la skill python-typing-ops dans Claude.ai
npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops python-typing-ops && zip -r python-typing-ops.zip python-typing-ops # claude.ai → Customize → Skills → + → Create skill → Upload a skill → python-typing-ops.zip
Vérifications automatisées
Exécuté le 15 nov. 2026Rapport complet →A réussi nos vérifications automatiques. Ce n'est pas un audit de sécurité : lisez les scripts avant de laisser un agent les exécuter. Fonctionnement des vérifications
- Dépôt source lié et accessible0xdarkmatter/claude-mods/skills/python-typing-ops is public and reachablegithub.com/0xdarkmatter/claude-mods/tree/HEAD/skills/python- ↗Réussi
- Licence open source (OSI)MITspdx.org/licenses/MIT.html ↗Réussi
- Commit ou version publiée au cours de l'année écouléeLast commit 2026-11-07github.com/0xdarkmatter/claude-mods/commits ↗Réussi
- Aucun téléchargement-exécution ni vol d'identifiants dans les scripts1 script read; no download-and-run, remote eval, base64 execution or credential uploadRéussi
- Aucune instruction cachée dans SKILL.mdNo override phrases, safeguard switches, credential requests or hidden charactersgithub.com/0xdarkmatter/claude-mods/blob/HEAD/skills/python- ↗Réussi
- Les outils préautorisés sont limitésPre-approved: Read, Writegithub.com/0xdarkmatter/claude-mods/blob/HEAD/skills/python- ↗Réussi
- SKILL.md respecte le format Agent SkillsValid name and description; says when to use it; 240 linesgithub.com/0xdarkmatter/claude-mods/blob/HEAD/skills/python- ↗Réussi
SKILL.md
Voir sur GitHubPython Typing Patterns
Modern type hints for safe, documented Python code.
Basic Annotations
# Variables
name: str = "Alice"
count: int = 42
items: list[str] = ["a", "b"]
mapping: dict[str, int] = {"key": 1}
# Function signatures
def greet(name: str, times: int = 1) -> str:
return f"Hello, {name}!" * times
# None handling
def find(id: int) -> str | None:
return db.get(id) # May return None
Collections
from collections.abc import Sequence, Mapping, Iterable
# Use collection ABCs for flexibility
def process(items: Sequence[str]) -> list[str]:
"""Accepts list, tuple, or any sequence."""
return [item.upper() for item in items]
def lookup(data: Mapping[str, int], key: str) -> int:
"""Accepts dict or any mapping."""
return data.get(key, 0)
# Nested types
Matrix = list[list[float]]
Config = dict[str, str | int | bool]
Optional and Union
# Modern syntax (3.10+)
def find(id: int) -> User | None:
pass
def parse(value: str | int | float) -> str:
pass
# With default None
def fetch(url: str, timeout: float | None = None) -> bytes:
pass
TypedDict
from typing import TypedDict, Required, NotRequired
class UserDict(TypedDict):
id: int
name: str
email: str | None
class ConfigDict(TypedDict, total=False): # All optional
debug: bool
log_level: str
class APIResponse(TypedDict):
data: Required[list[dict]]
error: NotRequired[str]
def process_user(user: UserDict) -> str:
return user["name"] # Type-safe key access
Callable
from collections.abc import Callable
# Function type
Handler = Callable[[str, int], bool]
def register(callback: Callable[[str], None]) -> None:
pass
# With keyword args (use Protocol instead)
from typing import Protocol
class Processor(Protocol):
def __call__(self, data: str, *, verbose: bool = False) -> int:
...
Generics
from typing import TypeVar
T = TypeVar("T")
def first(items: list[T]) -> T | None:
return items[0] if items else None
# Bounded TypeVar
from typing import SupportsFloat
N = TypeVar("N", bound=SupportsFloat)
def average(values: list[N]) -> float:
return sum(float(v) for v in values) / len(values)
Protocol (Structural Typing)
from typing import Protocol
class Readable(Protocol):
def read(self, n: int = -1) -> bytes:
...
def load(source: Readable) -> dict:
"""Accepts any object with read() method."""
data = source.read()
return json.loads(data)
# Works with file, BytesIO, custom classes
load(open("data.json", "rb"))
load(io.BytesIO(b"{}"))
Type Guards
from typing import TypeGuard
def is_string_list(val: list[object]) -> TypeGuard[list[str]]:
return all(isinstance(x, str) for x in val)
def process(items: list[object]) -> None:
if is_string_list(items):
# items is now list[str]
print(", ".join(items))
Literal and Final
from typing import Literal, Final
Mode = Literal["read", "write", "append"]
def open_file(path: str, mode: Mode) -> None:
pass
# Constants
MAX_SIZE: Final = 1024
API_VERSION: Final[str] = "v2"
Quick Reference
| Type | Use Case |
|---|---|
X | None |
Optional value |
list[T] |
Homogeneous list |
dict[K, V] |
Dictionary |
Callable[[Args], Ret] |
Function type |
TypeVar("T") |
Generic parameter |
Protocol |
Structural typing |
TypedDict |
Dict with fixed keys |
Literal["a", "b"] |
Specific values only |
Final |
Cannot be reassigned |
Type Checker Commands
# mypy (run inside the project env)
uv run mypy src/ --strict
# pyright
uv run pyright src/
# In pyproject.toml
[tool.mypy]
strict = true
python_version = "3.11"
Emerging: ty — Astral's Rust-based type checker (same toolchain as uv +
ruff), dramatically faster than mypy. Still in preview (pre-1.0), so mypy or
pyright remain the production default — but worth watching, and easy to try:
uvx ty check. Adopt for new projects once it stabilizes.
Additional Resources
./references/generics-advanced.md- TypeVar, ParamSpec, TypeVarTuple./references/protocols-patterns.md- Structural typing, runtime protocols./references/type-narrowing.md- Guards, isinstance, assert./references/mypy-config.md- mypy/pyright configuration./references/runtime-validation.md- Pydantic v2, typeguard, beartype./references/overloads.md- @overload decorator patterns
Scripts
./scripts/check-types.sh- Run type checkers with common options
Assets
./assets/pyproject-typing.toml- Recommended mypy/pyright config
See Also
This is a foundation skill with no prerequisites.
Related Skills:
python-pytest-ops- Type-safe fixtures and mocking
Build on this skill:
python-async-ops- Async type annotationspython-fastapi-ops- Pydantic models and validationpython-database-ops- SQLAlchemy type annotations
Fichiers de cette skill
9Questions sur la skill python-typing-ops
Comment installer la skill python-typing-ops dans Claude Code ?
Exécutez npx degit 0xDarkMatter/claude-mods/skills/python-typing-ops ~/.claude/skills/python-typing-ops. Claude Code charge les skills depuis ~/.claude/skills (tous les projets) ou .claude/skills (un seul projet) et utilise une skill lorsque sa description correspond à la tâche.
Quels clients peuvent utiliser la skill python-typing-ops ?
Tout client qui lit le format Agent Skills : Claude Code, Codex, Gemini CLI et claude.ai (envoi sous forme de ZIP). Les scripts de la skill ne s'exécutent que si le client autorise l'exécution de code.
Quelles versions de Python sont requises pour ces modèles ?
Les modèles utilisent la syntaxe Python 3.10+ (comme la syntaxe d'union X | Y), et certains modèles spécifiques comme Self ou TypeVarTuple nécessitent Python 3.11+.
Comment puis-je exécuter des vérificateurs de type sur mon projet ?
Vous pouvez utiliser mypy ou pyright via uv, par exemple : 'uv run mypy src/ --strict' ou 'uv run pyright src/'.
Quelle est la différence entre Callable et Protocol pour les types de fonctions ?
Callable est utilisé pour les types de fonctions simples, tandis que Protocol est utilisé lorsque vous devez spécifier des arguments nommés.