In Python wordt al sinds de vroegste versies documentatie van de code aangemoedigd via docstrings. Met de komst van Python 3.5 (PEP 484) werden type-annotaties (type hints) toegevoegd om de leesbaarheid te verbeteren en de ondersteuning van type-analyse tools (zoals mypy, pyright, etc.) te verbeteren. Op deze manier kunnen documentatie en typing worden gecombineerd in de definitie van functies en klassen.
Zonder type-annotaties is het moeilijk om snel te begrijpen waar de functie mee werkt en wat je ervan kunt verwachten. Het gebrek aan goede docstrings leidt tot misverstanden over de interface en gebruiksfouten. Als type hints of docstrings verkeerd worden gebruikt, verstoort dit de statische analyse en vermindert het de ondersteuning van de code.
Gebruik meerregelige docstrings om het doel van de functie, parameters en resultaat te documenteren, en type hints om expliciet de types van argumenten en geretourneerde waarden aan te geven.
Voorbeeldcode:
def add_numbers(a: int, b: int) -> int: """ Voegt twee gehele getallen samen en retourneert het resultaat. :param a: Eerste operand, int :param b: Tweede operand, int :return: Som, int """ return a + b
Belangrijke kenmerken:
Kunnen type-annotaties invloed hebben op de uitvoering van het programma?
Nee. Type-annotaties (type hints) worden niet gecontroleerd door de Python-interpreter tijdens uitvoering en dienen uitsluitend voor analysetools en IDE's, alsook voor autogeneratie van documentatie. Ze leiden niet tot runtime-fouten en zijn altijd optioneel.
Kun je type-annotaties gebruiken om de waarden van een parameter te beperken?
Nee. Het specificeren van een type, bijvoorbeeld x: int, voorkomt niet dat een waarde van een ander type in de praktijk wordt doorgegeven. Hiervoor kun je runtime-controles (assert/isinstance) gebruiken, maar niet type hints — ze worden niet automatisch verifiziert.
Kun je opmerkingen # type: ... gebruiken in plaats van annotaties? Waar kan dit nuttig zijn?
Ja, dit is toegestaan als compatibiliteit met Python 2 of oudere codebases nodig is. Bijvoorbeeld:
def foo(x, y): # type: (int, str) -> bool pass
Dit wordt begrepen door mypy en soortgelijke tools, net als de moderne syntaxis, maar in nieuwe projecten is het beter om de standaardannotaties te gebruiken.
In een groot project zijn functies helemaal niet voorzien van docstrings en type hints — de ontwikkelaar besteedt veel tijd aan bestuderen en debuggen, en maakt vaak fouten met typen en de bedoeling van de invoergegevens.
Voordelen:
Nadelen:
Alle publieke functies hebben een uitgebreide docstring en correcte type hints, waardoor IDE's en analyzers snel typefouten kunnen vinden en automatisch documentatie voor de API kunnen genereren.
Voordelen:
Nadelen: