Type Hints — Python

Type Hints di Python Type hints (annotation) memberi tahu tipe parameter dan return value tanpa mengubah perilaku runtime Python. Ditambahkan resmi di PEP 484.

Type Hints di Python

Type hints (annotation) memberi tahu tipe parameter dan return value tanpa mengubah perilaku runtime Python. Ditambahkan resmi di PEP 484.

Sintaks Dasar

def sapa(nama: str) -> str:
    return f"Halo, {nama}!"

def jumlah(a: int, b: int) -> int:
    return a + b

umur: int = 25
pi: float = 3.14
aktif: bool = True

Tipe Collection

Sejak Python 3.9+, tipe built-in bisa langsung di-subscript (tidak perlu from typing):

def average(angka: list[int]) -> float:
    return sum(angka) / len(angka)

def count_words(text: str) -> dict[str, int]:
    hasil: dict[str, int] = {}
    for w in text.split():
        hasil[w] = hasil.get(w, 0) + 1
    return hasil

koordinat: tuple[float, float] = (10.5, 20.3)
unique_tags: set[str] = {"python", "web"}

Module typing

from typing import Optional, Union, Callable, Any

# Optional[X] = X | None — parameter boleh None
def cari_user(id: int) -> Optional[str]:
    if id == 0:
        return None
    return "Budi"

# Union[A, B] = A atau B
def parse(x: Union[int, str]) -> int:
    return int(x)

# Python 3.10+ — pakai operator | (lebih ringkas)
def parse_v2(x: int | str) -> int:
    return int(x)

# Callable — tipe untuk fungsi
def apply(fn: Callable[[int], int], x: int) -> int:
    return fn(x)

apply(lambda n: n * 2, 5)   # 10

Kenapa Pakai Type Hints?

Runtime Behavior — TIDAK Dipaksa!

def kuadrat(x: int) -> int:
    return x ** 2

# Python TIDAK melempar error walaupun tipe salah
print(kuadrat("3"))   # TypeError: unsupported... (dari operasi **, bukan dari hint)
print(kuadrat(2.5))    # 6.25 — jalan, walaupun hint-nya int

Type hints hanya hint — tool statis yang memverifikasinya, bukan Python sendiri. Kalau kamu butuh enforcement runtime, pakai library seperti pydantic.

Type Alias

Beri nama pendek untuk tipe kompleks:

from typing import TypeAlias

Coords: TypeAlias = tuple[float, float]
Scores: TypeAlias = dict[str, list[int]]

def jarak(a: Coords, b: Coords) -> float:
    return ((a[0]-b[0])**2 + (a[1]-b[1])**2) ** 0.5

Dataclasses (Sekilas)

Cara ringkas membuat class "data container" dengan type hints — otomatis dapat __init__, __repr__, dan __eq__.

from dataclasses import dataclass

@dataclass
class Mahasiswa:
    nama: str
    nim: str
    ipk: float = 0.0

mhs = Mahasiswa("Budi", "123")
print(mhs)   # Mahasiswa(nama='Budi', nim='123', ipk=0.0)

Yang akan kamu pelajari