Până la apariția versiunii Python 3.12, definirea tipurilor generice și a alias-urilor de tip era greoaie, necesitând importuri din modulul typing (cum ar fi TypeVar, Generic și TypeAlias). Standardul PEP 695 a revoluționat sistemul de tipare din Python prin introducerea cuvântului cheie nativ type și a unei sintaxe compacte cu paranteze drepte pentru parametri generici, identică cu cea din limbaje moderne precum TypeScript, Rust sau Swift.
# METODA VECHE:
from typing import TypeVar, Union, TypeAlias
T = TypeVar('T')
CoordonateVechi: TypeAlias = tuple[T, T] # Necesita declarare separata de TypeVar
# NOU ÎN PYTHON 3.12+: DECLARAȚIA type NATIVĂ
type Coordonate[T] = tuple[T, T]
# Putem folosi alias-ul direct:
pct_int: Coordonate[int] = (10, 20)
pct_float: Coordonate[float] = (3.14, 2.71)
# Alias simplu pentru structuri complexe:
type DateUtilizator = dict[str, list[int | str]]
Clase și Funcții Generice Simplificate
Nu mai este nevoie să moșteniți clasa Generic[T]. Parametrii de tip sunt adăugați direct după numele funcției sau al clasei:
# Clasa declară parametrul generic [T] direct în antet:
class Stiva[T]:
def __init__(self) -> None:
self._elemente: list[T] = []
def adauga(self, element: T) -> None:
self._elemente.append(element)
def extrage(self) -> T:
return self._elemente.pop()
# Funcție generică cu constrângere de tip (Type Bound):
def dubleaza[T: (int, float, str)](valoare: T) -> T:
return valoare * 2
Evaluarea Leneșă (Lazy Evaluation) și Tipuri Recursive
Un mare beneficiu al instrucțiunii type este faptul că expresia de tip este evaluată în mod leneș (lazy) la runtime. Acest lucru permite crearea nativă de tipuri recursive (cum ar fi arbori sau structuri JSON) fără a apela la șiruri de caractere (forward references):
# Tip recursiv curat:
type StructuraJson = dict[str, StructuraJson] | list[StructuraJson] | str | int | float | bool | None
type ArboreBinar[T] = tuple[T, ArboreBinar[T] | None, ArboreBinar[T] | None]