PythonQualitéDev

Python : typage statique avec mypy pour un code plus robuste

1 août 2026 · Sphinx-Digital

Python est dynamiquement typé, mais rien n’empêche de l’utiliser comme un langage statiquement typé. Le typage statique détecte des bugs à la lecture du code que les tests ne catchent pas toujours.

Annotations de types : la base

from typing import Optional, Union

# ❌ Sans types — que retourne cette fonction ?
def get_user(user_id):
    pass

# ✅ Avec types — documentation et vérification automatique
def get_user(user_id: int) -> Optional[dict[str, str]]:
    user = db.find(user_id)
    return {"name": user.name, "email": user.email} if user else None

mypy : vérifier les types statiquement

pip install mypy
mypy src/           # vérifie tous les fichiers
mypy --strict src/  # mode strict — couvre les cas ambigus
# mypy détecte cette erreur avant l'exécution
def greet(name: str) -> str:
    return f"Hello {name}"

greet(42)   # error: Argument 1 has incompatible type "int"; expected "str"

Protocoles : duck typing typé

from typing import Protocol

class Sendable(Protocol):
    def send(self, message: str) -> bool: ...

class EmailService:
    def send(self, message: str) -> bool:
        return send_email(message)

class SlackService:
    def send(self, message: str) -> bool:
        return post_to_slack(message)

# Les deux classes satisfont Sendable sans héritage
def notify(service: Sendable, msg: str) -> None:
    service.send(msg)

Pydantic : validation de données avec le typage

from pydantic import BaseModel, EmailStr, validator

class UserCreate(BaseModel):
    name: str
    email: EmailStr
    age: int

    @validator('age')
    def age_must_be_positive(cls, v: int) -> int:
        if v < 0:
            raise ValueError('Age must be positive')
        return v

# Pydantic valide automatiquement les types et les contraintes
user = UserCreate(name="Alice", email="alice@example.com", age=-5)
# ValidationError: age must be positive

Notre formation Python couvre le typage, Pydantic et les outils de qualité de code.