Que fait python-type-safety ?
Sécurité des types Python avec annotations, génériques, protocoles et vérification stricte. À utiliser lors de l’ajout d’annotations de type, de l’implémentation de classes génériques, de la définition d’interfaces structurelles ou de la configuration de mypy/pyright.
Vue d’ensemble
Ce skill vous aide à appliquer une sécurité de type rigoureuse dans vos projets Python. Il fournit des modèles et des bonnes pratiques pour :
- Ajouter des annotations de type complètes
- Implémenter des classes génériques et des fonctions
- Définir des protocoles pour des interfaces implicites
- Configurer mypy ou pyright pour une vérification stricte
Utilisation
-
Annoter les fonctions et les méthodes :
- Utilisez
-> Typepour les valeurs de retour. - Utilisez
: Typepour chaque paramètre. - Exemple:
def ajouter(a: int, b: int) -> int: return a + b
- Utilisez
-
Implémenter des génériques :
- Utilisez
TypeVarpour les types paramétrés. - Exemple:
from typing import TypeVar T = TypeVar('T') def premier_element(lst: list[T]) -> T | None: return lst[0] if lst else None
- Utilisez
-
Définir des protocoles :
- Utilisez
Protocolpour les interfaces structurelles. - Exemple:
from typing import Protocol class Volant(Protocol): def voler(self) -> None: ...
- Utilisez
-
Configurer mypy/pyright :
- Ajoutez un fichier
pyproject.tomloumypy.iniavec des options strictes. - Exemple pour
pyproject.toml:[tool.mypy] strict = true disallow_untyped_defs = true
- Ajoutez un fichier
Meilleures pratiques
- Annotations obligatoires pour les fonctions publiques.
- Utilisation de
Optional[T]ouT | Nonepour les valeurs nulles. - Éviter
Anyautant que possible. - Tester régulièrement avec mypy ou pyright dans le pipeline CI.
Exemples
Classe générique
from typing import Generic, TypeVar
T = TypeVar('T')
class Boite(Generic[T]):
def __init__(self, contenu: T) -> None:
self._contenu = contenu
def obtenir(self) -> T:
return self._contenu
Protocole
from typing import Protocol
class Imprimable(Protocol):
def imprimer(self) -> str: ...
def afficher(obj: Imprimable) -> None:
print(obj.imprimer())