ProgrammationDéveloppeur Backend

Expliquez le fonctionnement et la purpose des annotations de type (type hints) en Python. Comment elles influencent l'exécution du programme et quels pièges y a-t-il à utiliser ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

Les annotations de type (type hints) sont un moyen d'indiquer explicitement les types attendus des variables, des arguments et des valeurs de retour des fonctions. La syntaxe est apparue dans Python 3.5 (PEP 484). Les annotations sont statiques — l'interpréteur les ignore pendant l'exécution, elles sont destinées aux outils d'analyse de code (mypy, Pyright, IDE).

Les annotations aident à :

  • Améliorer la lisibilité et l'auto-documentation du code.
  • Permettre aux outils d'analyser et de détecter les erreurs de type avant l'exécution.
  • Être utilisées dans l'autocomplétion, le refactoring et la documentation.

Exemple :

def add(x: int, y: int) -> int: return x + y def show(items: list[str]) -> None: print(', '.join(items))

Question piège.

Question fréquente :

Les annotations de type peuvent-elles d'une manière ou d'une autre influencer la performance ou la correction de l'exécution du code ?

Réponse : Non, les annotations de type n'affectent ni la performance ni la fonction du programme à l'exécution. Ce ne sont que des métadonnées. Mais elles peuvent être utilisées par des outils ou des frameworks tiers pour le contrôle et la validation des types (par exemple, dans FastAPI).

Exemples d'erreurs réelles dues à l'ignorance des subtilités du sujet.


Histoire

Dans le projet, de grandes structures dynamiques étaient annotées via list, dict sans préciser les éléments (par exemple : def f(x: list): ...). En conséquence, les analyseurs statiques ne pouvaient pas détecter les erreurs de type parce que l'annotation ne précisait pas ce qui se trouvait à l'intérieur.


Histoire

On a utilisé from __future__ import annotations pour supporter l'évaluation reportée dans Python 3.7, mais on a oublié cela dans une partie du projet. Cela a conduit à des références avant (forward references) provoquant des erreurs lors de l'analyse statique et à l'exécution en utilisant certains frameworks.


Histoire

Dans un grand projet, le type de la valeur de retour a été mal défini : on a oublié d'importer Optional, ce qui a provoqué une erreur de mypy et plusieurs problèmes non documentés dans l'IDE, qui perturbaient l'autocomplétion et la mise en surbrillance des erreurs.