>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Python

Hoe Mypy Python-code betrouwbaarder maakt en waarom je het vandaag zou moeten adopteren

mypy logo

Stel je een klassiek scenario voor. Je deployt een feature voor het weekend, alle tests slagen, en vijf minuten na deployment begint je monitoring te haperen. De logs tonen een bekende TypeError: unsupported operand type(s) for +: 'int' and 'str'. Iemand heeft een string uit een webformulier doorgegeven in plaats van een getal, de functie probeerde waarden bij elkaar op te tellen, en de service ging offline.

Python's dynamische typing geeft je een goede start en laat je snel prototypes bouwen. Maar naarmate het project groeit, wordt het een constante bron van risico. Elke refactoring van een oude module wordt een mijnenveld.

Dit is waar mypy helpt — de officiële statische type-checker voor Python die dergelijke fouten opvangt voordat de code überhaupt draait.

Het Idee Achter Geleidelijke Typing

Type-annotaties verschenen in Python met de release van PEP 484 in 2015. Mypy leest deze annotaties en valideert hun logica, zonder enige invloed op de programmauitvoering. Voor de Python-interpreter zelf blijven je types gewoon hints in de code, vergelijkbaar met gewone commentaren.

De ontwikkelaars hebben geleidelijke typing in het hulpmiddel ingebouwd. Je hoeft niet de hele codebase van de ene op de andere dag te herschrijven. Je kunt een paar kritische modules annoteren, zoals een payment gateway of autorisatie, en de rest van de code dynamisch laten.

Laten we naar een eenvoudig foutvoorbeeld kijken:

def calculate_discount(price: float, discount: float) -> float:
    return price * (1 - discount)

user_input = input("Введите размер скидки: ")
total = calculate_discount(100.0, user_input)

Als je de check vanaf de terminal uitvoert:

mypy script.py

De analyzer toont direct de locatie van de fout:

script.py:5: error: Argument 2 to "calculate_discount" has incompatible type "str"; expected "float"

Je hebt een potentiële productiecrash opgevangen tijdens de ontwikkeling, en daar precies één seconde aan besteed.

Belangrijkste Functies van de Analyzer

Het hulpmiddel kan veel meer dan alleen basisgetallen en strings vergelijken. Mypy begrijpt complexe codestructuur dankzij een doordacht typesysteem:

  • Automatische type-inferentie. Als je items = [1, 2, 3] schrijft, zal het hulpmiddel zelf uitzoeken dat het een lijst van integers is.
  • Ondersteuning voor generics, tuples, functies en type matching.
  • Structurele subtyping via Protocols en Union types.
  • Controle van None waarden. Vaarwel tegen onverwachte AttributeError: 'NoneType' object has no attribute.

Wanneer een project groeit tot honderdduizenden regels, begint een reguliere check tijd te kosten. Voor zulke situaties hebben de auteurs een daemon-modus gemaakt:

dmypy run -- script.py

De daemon blijft in het geheugen, slaat de afhankelijkheidsgrafiek op, en wanneer bestanden veranderen, berekent het alleen het verschil opnieuw. Het antwoord komt instant.

Wat Mypy Snel Maakt

Een interessant detail over de repository: mypy is geschreven in Python maar kan zichzelf compileren.

De auteurs hebben het mypyc hulpmiddel gemaakt, dat getypte Python-code vertaalt naar C-extensies. Dankzij deze compilatie draait de analyzer zelf ongeveer vier keer sneller dan de standaard interpreter.

Integreren in Je Workflow

Handmatig code controleren via de console is onhandig. Mypy integreert gemakkelijk met alledaagse hulpmiddelen.

Installatie kost één commando:

python3 -m pip install -U mypy

Er zijn kant-en-klare plugins voor VS Code, PyCharm, Vim en Emacs. Fouten worden direct in de editor gemarkeerd terwijl je typt. Door integratie met pre-commit in te stellen, blokkeer je de mogelijkheid om code met incorrecte types te committen.

Waar Moeilijkheden Ontstaan

De type-checker lost niet absoluut elk probleem op. Je zult met sommige ongemakken moeten leven.

Bibliotheken van derden worden niet altijd geleverd met annotaties. Voor populaire packages is er een aparte repository typeshed, maar voor een obscure bibliotheek moet je ofwel zelf .pyi bestanden schrijven of de checks dempen met # type: ignore.

Bovendien heeft de projectrepository meer dan drieduizend open issues. Edge cases van complexe metaprogrammering leiden soms tot false positives.

Voor Wie het Hulpmiddel Is

Voor een eenmalig 50-regelig script is mypy duidelijk overkill. Annotaties zouden alleen maar je tijd verspillen.

Maar als je een langlopend project bouwt met FastAPI, Django, of een service ontwikkelt waar een team aan werkt, zal mypy je code beschermen tegen triviale tikfouten en logica-bugs.

Begin met een kleine stap: installeer het package, stel een gematigde configuratiebestand mypy.ini in, en voeg annotaties toe aan een paar complexe functies. De code wordt duidelijker zonder lange documentatie te lezen.

Gerelateerde projecten