Dataclass & Type Hints

Menulis class data ringkas dengan @dataclass dan menambah anotasi tipe.

Part 22 dari 24 ± 35 menit Gratis

Type hints

Anotasi tipe mendokumentasikan tipe yang diharapkan pada variable, parameter, dan nilai kembalian:

nama: str = "Dina"
umur: int = 20

def luas(p: float, l: float) -> float:
    return p * l

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

Python tidak memaksa tipe saat berjalan. Manfaatnya: editor memberi saran dan peringatan lebih baik, alat seperti mypy/Pyright menemukan bug sebelum dijalankan, dan kode lebih mudah dipahami.

Tipe yang sering dipakai: int, float, str, bool, list[int], dict[str, int], tuple[int, str], set[str], dan X | None (Python 3.10+) untuk nilai opsional.

Masalah: class data yang bertele-tele

class Produk:
    def __init__(self, nama, harga, stok=0):
        self.nama = nama
        self.harga = harga
        self.stok = stok

    def __repr__(self):
        return f"Produk(nama={self.nama!r}, harga={self.harga!r}, stok={self.stok!r})"

    def __eq__(self, lain):
        return (self.nama, self.harga, self.stok) == (lain.nama, lain.harga, lain.stok)

Banyak kode berulang hanya untuk menyimpan data.

Solusi: @dataclass

from dataclasses import dataclass

@dataclass
class Produk:
    nama: str
    harga: int
    stok: int = 0

p = Produk("Pensil", 2500)
print(p)                       # Produk(nama='Pensil', harga=2500, stok=0)
print(p == Produk("Pensil", 2500))   # True

Dekorator @dataclass membuat otomatis __init__, __repr__, dan __eq__ berdasarkan field yang kamu tulis.

Menambah method

@dataclass
class Produk:
    nama: str
    harga: int
    stok: int = 0

    def nilai_stok(self) -> int:
        return self.harga * self.stok

Opsi berguna

@dataclass(frozen=True)          # immutable, bisa jadi kunci dict
class Titik:
    x: int
    y: int

from dataclasses import field

@dataclass
class Keranjang:
    item: list[str] = field(default_factory=list)   # default mutable yang benar

Jangan menulis item: list = [] — default mutable dilarang (error), gunakan field(default_factory=...).

Berguna: asdict

from dataclasses import asdict
print(asdict(Produk("Pensil", 2500)))   # {'nama': 'Pensil', 'harga': 2500, 'stok': 0}

Kapan memakai dataclass?

Saat class terutama berfungsi menyimpan data (DTO, konfigurasi, hasil query). Bila logika dan perilaku mendominasi, class biasa tetap pilihan baik.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X