Nasveti tipov (PEP 484+) vam omogočajo označiti pričakovane tipe spremenljivk, parametrov funkcij in povratnih vrednosti. So neobvezni in se pri izvajanju ne preverjajo — Python jih ignora med izvajanjem — toda omogočajo statično analizo, boljše orodja in jasnejšo kodo.
Osnovna sintaksa
def greet(name: str, times: int = 1) -> str:
return name * times
age: int = 30
names: list[str] = ["Ann", "Bob"]
scores: dict[str, int] = {"math": 90}
Zapis : type označuje parametre/spremenljivke in -> type povratno vrednost. Ti dokumentirajo namen in jih preverjajo orodja, vendar Python jih ne preveri pri izvajanju (posredovanje napačnega tipa ne bo sprožilo napake samo od sebe).
Pogosti konstrukti tipizacije
from typing import Optional, Union, Callable, Any
def find(id: int) -> Optional[str]: # str OR None (= str | None in 3.10+)
...
x: int | str # Union (3.10+ syntax)
handler: Callable[[int], bool] # a function taking int, returning bool
items: list[dict[str, int]] # nested generics
Statično preverjanje tipov ujame napake pred izvajanjem
def add(a: int, b: int) -> int:
return a + b
add("hello", 3) # ✅ Python runs it (and crashes); ❌ mypy/pyright flags it BEFORE running
Preverjevalnik tipov, kot je mypy ali pyright, analizira nasvete in prijavi napake tipov preden poženete kodo — ujame celoten razred napak (napačni tipi argumentov, zloraba None) zgodaj, kot bi to naredil prevajalnik.
Prednosti
✓ Catch type bugs early via static checkers (mypy, pyright) — before runtime
✓ IDE support — better autocomplete, refactoring, inline error detection
✓ Self-documenting code — signatures show exactly what's expected/returned
✓ Powers frameworks — FastAPI/Pydantic USE hints for validation & docs
✓ Easier maintenance of large codebases (catch breaking changes)
So neobvezni in postopni
You can add hints incrementally — a few functions, or strictly everywhere.
Unannotated code still works. "Gradual typing" suits adopting them over time.
Ogrodja jih izkoriščajo med izvajanjem
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int # Pydantic USES the hint to VALIDATE data at runtime
User(name="Ann", age="x") # raises a validation error
Nekatere knjižnice (Pydantic, FastAPI) berejo nasvete tipov za preverjanje podatkov in ustvarjanje dokumentacije — kar jih dela funkcionalno smiselne med izvajanjem.
Zakaj je to pomembno
Nasveti tipov prinašajo številne prednosti statične tipizacije v Python brez žrtvovanja njegove dinamične fleksibilnosti: ujamejo napake, povezane s tipi, zgodaj (prek mypy/pyright), dramatično izboljšajo orodja IDE in refaktoriranje, služijo kot živa dokumentacija in omogočajo sodobna ogrodja (FastAPI, Pydantic), ki jih uporabljajo za preverjanje in samodejno generirano dokumentacijo.
Čeprav so neobvezni in jih Python sam ne preveri med izvajanjem, so postali standard v poklicnih in obsežnih Python kodenimi ker naredijo kodo zanesljivejšo, bolj vzdrževalno in samoobjavljajočo se — vse bolj pričakovan praksa, zlasti ko projekti rastejo.
