Aller au contenu principal

Typage (annotations)

Progression

#Typage statique (annotations)

À quoi ça sert ?

À quoi ça sert: clarifier les intentions, obtenir une meilleure autocomplétion et détecter tôt des incohérences. Comment: annotations, génériques, Protocols et dataclasses; vérification via mypy/pyright sans modifier l’exécution.

#Bases

pythonpython
1from typing import List, Optional, Dict2 3def greet(name: str, times: int = 1) -> str:4    return ' '.join([f'Bonjour {name}'] * times)5 6users: List[str] = ['Ada', 'Linus']7config: Dict[str, Optional[int]] = {'port': 8080, 'retries': None}

#Génériques et Protocols

pythonpython
1from typing import TypeVar, Iterable, Protocol2 3T = TypeVar('T')4 5def first(xs: Iterable[T]) -> T | None:6    for x in xs: return x7    return None8 9class SupportsLen(Protocol):10    def __len__(self) -> int: ...11 12def is_empty(x: SupportsLen) -> bool:13    return len(x) == 0

Le typage via Protocols est structurel: une classe n’a pas besoin d’hériter explicitement, il suffit qu’elle fournisse les attributs et méthodes requis. Les unions (A | B) et Optional[T] décrivent des alternatives; Literal contraint une valeur à un ensemble fini. Le typage est graduel: on peut annoter progressivement et laisser l’outil affiner les types après des gardes isinstance (narrowing) sans cast explicite.

#Dataclasses

pythonpython
1from dataclasses import dataclass2 3@dataclass4class User:5    id: int6    name: str7    email: str | None = None8 9u = User(1, 'Ada')

Les TypedDict décrivent des dictionnaires à clés connues, utiles pour des schémas JSON. Les décorateurs @overload documentent des signatures alternatives selon les arguments. Pour typer une bibliothèque tierce sans annotations, on peut ajouter des stubs .pyi et les publier à côté du paquet ou via types-....

#Animation: bénéfices du typage

Types → meilleures suggestions
L’IDE infère les attributs et signatures.
Étape 1 / 3
Au runtime

Les annotations ne valident rien par défaut à l’exécution; utilisez pydantic/attrs si besoin de validation runtime.

#Quiz

Quel outil vérifie les types sans exécuter le code ?
Quel outil vérifie les types sans exécuter le code ?