Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Python: Objek dan Berkas

Pelajaran 6 dari 16

Pewarisan, dataclass, dan properti

Kelas data dengan @dataclass

Setelah pelajaran ini kamu bisa menulis kelas data dengan @dataclass, memberi nilai bawaan yang aman dengan field(default_factory=...), dan mengubah objeknya menjadi dict dengan asdict.

±13 menitDiperiksa 5 Okt 2026

Materi

Banyak kelas hanya menyimpan data: __init__ yang menyalin argumen ke atribut, __repr__ yang menampilkannya, dan __eq__ yang membandingkannya. Dekorator @dataclass dari modul dataclasses menuliskan ketiganya untukmu. Ia membaca baris berpenanda tipe di badan kelas, seperti judul: str, sebagai field, lalu membuat __init__ dengan parameter sesuai urutan field itu. __eq__ buatannya membandingkan semua field satu per satu.

from dataclasses import dataclass, field, asdict

@dataclass
class Buku:
    judul: str
    penulis: str
    tahun: int
    dipinjam: bool = False
    peminjam: list = field(default_factory=list)

b = Buku("Bumi Manusia", "Pramoedya Ananta Toer", 1980)
print(b)
# Buku(judul='Bumi Manusia', penulis='Pramoedya Ananta Toer', tahun=1980, dipinjam=False, peminjam=[])
print(b == Buku("Bumi Manusia", "Pramoedya Ananta Toer", 1980))   # True
print(asdict(b)["tahun"])   # 1980

Field bernilai bawaan ditulis setelah field tanpa nilai bawaan; urutan sebaliknya ditolak dengan TypeError: non-default argument 'b' follows default argument 'a'. Nilai bawaan yang bisa berubah seperti [] ditolak dengan ValueError, karena satu list itu akan dipakai bersama semua objek — masalah yang sama dengan atribut kelas di pelajaran 2. field(default_factory=list) membuat list baru untuk tiap objek. asdict(obj) mengubah objek menjadi dict, yang dipakai saat menyimpan ke JSON di modul 4.

Kapan dipakai: data berbentuk rekaman — buku, karyawan, transaksi — yang perlu ditampilkan dan dibandingkan. Method biasa tetap boleh ditulis di dalam kelas dataclass.

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 3 dari 3

Apa yang terjadi saat kelas ini didefinisikan?

from dataclasses import dataclass

@dataclass
class Rapat:
    judul: str
    peserta: list = []
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke