Historie van de vraag: Type hints zijn geïntroduceerd in Python 3.5 (PEP 484) ter ondersteuning van statische code-analyse, autocompleting, refactoring en autodocumentatie. Eerder kwam Python zonder strenge typing goed vooruit, maar met de groei van projecten en teams zijn ze nodig geworden om de kwaliteit van de code te verbeteren.
Probleem: Type annotaties zijn slechts aanwijzingen voor ontwikkelaars en externe tools (mypy, Pyright, enz.), de interpreter negeert ze tijdens de uitvoering. Fouten ontstaan vaak als:
Oplossing: Gebruik type annotaties voor functies en variabelen voor betere leesbaarheid, analyse door linters en IDE's. Vertrouw niet uitsluitend op annotaties — een statische typechecker is nodig. Voorbeeld:
def greeting(name: str) -> str: return f"Hello, {name}" def sum_nums(nums: list[int]) -> int: return sum(nums)
Complexere voorbeelden maken gebruik van de typing-module:
from typing import List, Dict, Optional def process(data: List[Dict[str, Optional[int]]]) -> None: ...
Belangrijkste kenmerken:
Verwerkt de Python-interpreter types uit annotaties tijdens de uitvoering?
Nee. Annotaties zijn beschikbaar via __annotations__, maar beheersen het gedrag niet tijdens de uitvoering.
Kun je variabelen zonder annotaties gebruiken in geannoteerde functies?
Ja. Annotaties zijn niet verplicht, maar hun afwezigheid kan verwarrend zijn.
Kun je het type van een variabele na annotatie opnieuw definiëren?
Ja, maar dit schendt de essentie van statische analyse en kan linters hinderen. Vermijd dit liever:
x: int = 5 x = 'string' # Linter zal klagen, maar de code zal uitgevoerd worden.
Negatieve case: Een functie wordt geannoteerd, maar de daadwerkelijk teruggegeven type is anders dan dat in de annotatie door een wijziging in de logica van de functie. Voordelen:
Positieve case: Alle functies en gegevens zijn geannoteerd, het project wordt gecontroleerd door mypy tijdens CI/CD. Voordelen: