Typing Features and PEPS
Typing Features and PEPS available in each Python Version.
Feature (click PEP for details) | What it adds / looks like | Introduced in |
---|---|---|
PEP 484 -- Core type hints & typing module | def add(a: int, b: int) -> int: | 3.5 |
PEP 526 -- Variable annotations | count: int = 0 | 3.6 |
PEP 563 -- from __future__ import annotations (lazy eval) | Annotations stored as strings | 3.7 (future‑flag) |
PEP 544 -- Protocols (structural typing) | class Jsonable(Protocol): ... | 3.8 |
PEP 589 -- TypedDict | class User(TypedDict): ... | 3.8 |
PEP 586 -- Literal types | def log(level: Literal["info","warn"]): ... | 3.8 |
PEP 591 -- Final qualifier | TOKEN: Final[str] = "..." | 3.8 |
PEP 585 -- Built‑in generics | list[int] , dict[str, Any] | 3.9 |
PEP 593 -- Annotated | x: Annotated[int, "units=px"] | 3.9 |
PEP 604 -- Union syntax | int | None | 3.10 |
PEP 612 -- ParamSpec / Concatenate | decorator‑safe generics | 3.10 |
PEP 613 -- TypeAlias qualifier | Vector: TypeAlias = list[float] | 3.10 |
PEP 647 -- TypeGuard for narrowing | def is_str(x) -> TypeGuard[str]: ... | 3.10 |
PEP 655 -- Required / NotRequired for TypedDict | optional vs. mandatory keys | 3.11 |
PEP 646 -- Variadic generics (TypeVarTuple , Unpack ) | tensor shapes, 2‑D arrays, ... | 3.11 |
PEP 673 -- Self type | fluent APIs: def set(...) -> Self: | 3.11 |
PEP 681 -- dataclass_transform helper | libraries like Pydantic, attrs | 3.11 |
PEP 695 -- Class‑level generics syntax | class Box[T]: ... | 3.12 |
PEP 698 -- @override decorator | flag intentional overrides | 3.13 |
PEP 649 -- New deferred‑eval algorithm (replaces PEP 563) | becomes the default | 3.14 |