Adnotacje typów (type hints) to sposób na wyraźne wskazanie oczekiwanych typów zmiennych, argumentów i zwracanych wartości funkcji. Składnia pojawiła się w Pythonie 3.5 (PEP 484). Adnotacje są statyczne — interpreter je ignoruje w czasie wykonania, są przeznaczone dla narzędzi analizy kodu (mypy, Pyright, IDE).
Adnotacje pomagają:
Przykład:
def add(x: int, y: int) -> int: return x + y def show(items: list[str]) -> None: print(', '.join(items))
Częste pytanie:
Czy adnotacje typów mogą w jakiś sposób wpłynąć na wydajność lub poprawność wykonywania kodu?
Odpowiedź: Nie, adnotacje typów nie wpływają ani na wydajność, ani na funkcję programu w runtime. To tylko metadane. Mogą być jednak używane przez zewnętrzne narzędzia lub frameworki do kontroli i walidacji typów (np. w FastAPI).
Historia
W projekcie duże dynamiczne struktury oznaczano typami przez list, dict bez precyzowania elementów (na przykład: def f(x: list): ...). W rezultacie analizatory statyczne nie mogły wykrywać błędów typowych, ponieważ z adnotacji nie było jasne, co znajduje się wewnątrz.
Historia
Używano from __future__ import annotations do obsługi postponed evaluation w Pythonie 3.7, ale zapomniano o tym w jednej części projektu. Doprowadziło to do tego, że referencje wsteczne powodowały błędy podczas analizy statycznej i w runtime przy użyciu niektórych frameworków.
Historia
W dużym projekcie niepoprawnie zadano typ zwracanego wyniku: zapomniano zaimportować Optional, co spowodowało błąd od mypy i szereg niedokumentowanych problemów w IDE, które przeszkadzały w autouzupełnianiu i podświetlaniu błędów.