Pendahuluan — dari mental model ke sintaks
Di Mengenal OOP (#40) kamu sudah punya cara berpikir: class = cetakan, object = barang konkret. Artikel ini mengubah itu menjadi kode Python yang bisa dijalankan.
Fokus hari ini sempit dan tajam: menulis class Buku, membuat beberapa instance, dan melihat bahwa tiap object punya identitas sendiri.
Prasyarat: Selesai #40 (atau setidaknya paham beda class vs object). Python 3.11+ sudah terpasang (
python --version).
Syntax class paling sederhana
Keyword class diikuti nama dalam PascalCase (huruf besar di tiap kata). Tubuh class diindentasi seperti fungsi:
class Buku:
pass # sementara kosong — class valid, belum punya perilaku
pass artinya “belum ada isi”. Berguna saat kamu masih merancang struktur. Untuk produksi, kita segera isi attribute dan method.
Class dengan attribute di dalam __init__
Hampir semua class nyata punya __init__: method khusus yang dipanggil otomatis saat object dibuat. Parameter pertama selalu self — merujuk ke instance yang sedang dibuat.
class Buku:
def __init__(self, judul, penulis, tahun):
self.judul = judul
self.penulis = penulis
self.tahun = tahun
Penjelasan singkat:
self.judul = judul— simpan nilai parameter ke attribute milik object ini- Nama di kiri (
self.judul) boleh sama dengan parameter; yang penting adalahself.
Detail dalam __init__, method lain, dan error “lupa self” akan dibahas lebih dalam di artikel Attribute & Method berikutnya. Hari ini cukup bisa membuat object.
Membuat object (instance)
Panggil nama class seperti memanggil fungsi — Python menjalankan __init__:
buku_a = Buku("Belajar Python", "Sari", 2024)
buku_b = Buku("ESP32 Praktis", "Budi", 2023)
print(buku_a.judul) # Belajar Python
print(buku_b.judul) # ESP32 Praktis
print(buku_a.penulis) # Sari
print(buku_b.tahun) # 2023
buku_a dan buku_b memakai cetakan yang sama, tetapi datanya berbeda. Mengubah satu tidak mengubah yang lain:
buku_a.tahun = 2025
print(buku_a.tahun) # 2025
print(buku_b.tahun) # 2023 — tidak ikut berubah
Diagram: satu class, banyak object
Identitas object: id() dan is
Selain isinya (judul, tahun), tiap object punya identitas di memori. Fungsi bawaan id() menampilkan angka unik (implementasi CPython: alamat memori):
buku_a = Buku("Belajar Python", "Sari", 2024)
buku_b = Buku("Belajar Python", "Sari", 2024) # isi sama!
print(id(buku_a))
print(id(buku_b))
print(buku_a is buku_b) # False — dua object berbeda
print(buku_a.judul == buku_b.judul) # True — nilainya sama
Operator is membandingkan identitas (object yang sama di memori). Operator == membandingkan nilai — tapi hati-hati: untuk class buatanmu sendiri, defaultnya buku_a == buku_b masih False (mirip is) sampai kita tulis __eq__ nanti. Makanya contoh di atas membandingkan buku_a.judul == buku_b.judul, bukan kedua object-nya.
Untuk pemula: ingat dulu bahwa dua pemanggilan Buku(...) = dua object, meski argumennya identik.
Method sederhana: perilaku milik object
Attribute menyimpan data; method adalah fungsi di dalam class yang bekerja pada data itu:
class Buku:
def __init__(self, judul, penulis, tahun):
self.judul = judul
self.penulis = penulis
self.tahun = tahun
def info(self):
return f"{self.judul} oleh {self.penulis} ({self.tahun})"
buku_a = Buku("Belajar Python", "Sari", 2024)
print(buku_a.info())
# Belajar Python oleh Sari (2024)
Saat menulis buku_a.info(), Python mengirim buku_a sebagai self secara otomatis. Itulah kenapa method selalu punya parameter self di definisi.
Kode lengkap — salin & jalankan
Gabungan singkat dari bagian di atas. Simpan sebagai buku.py, lalu jalankan python buku.py:
class Buku:
def __init__(self, judul, penulis, tahun):
self.judul = judul
self.penulis = penulis
self.tahun = tahun
def info(self):
return f"{self.judul} oleh {self.penulis} ({self.tahun})"
buku_a = Buku("Belajar Python", "Sari", 2024)
buku_b = Buku("ESP32 Praktis", "Budi", 2023)
print(buku_a.info())
print(buku_b.info())
print("id berbeda?", id(buku_a) != id(buku_b))
print("object yang sama?", buku_a is buku_b)
Pola Dasar — langkah membuat class pertama
-
1
Tulis class Nama Pakai PascalCase:
class Buku: -
2
Isi __init__ + self Terima data, simpan ke
self.atribut. -
3
Buat instance
obj = Buku(...)— boleh berkali-kali. -
4
Pakai attribute / method
obj.judul,obj.info()— data dan perilaku lewat object yang sama.
Kesalahan umum pemula
| Gejala | Penyebab tipikal | Perbaikan |
|---|---|---|
TypeError: Buku.__init__() missing ... required positional argument |
Memanggil Buku() tanpa argumen, padahal __init__ meminta data |
Isi semua parameter: Buku("Judul", "Penulis", 2024) |
TypeError: ... missing 1 required positional argument: 'self' |
Memanggil method lewat class tanpa instance, atau lupa self di definisi |
Pakai buku_a.info(); pastikan def info(self): |
AttributeError: 'Buku' object has no attribute 'judul' |
Belum di-set di __init__, atau typo nama |
Cek self.judul = judul |
Dua variabel “terasa sama” tapi is False |
Dua instance berbeda meski isinya mirip | Normal — bandingkan nilai attribute, bukan identitas, kecuali memang butuh object yang sama |
Latihan singkat
- Buat
class Anggotadengannamadanid_anggota. Buat dua instance, cetak attribute-nya. - Tambahkan method
sapa(self)yang mengembalikan string"Halo, {nama}". - Buat dua
Bukudengan judul sama. Bandingkanid(),is, dan==pada attributejudul.
FAQ singkat
Apakah wajib pakai __init__?
Tidak wajib secara sintaks, tapi hampir selalu kamu butuh. Tanpa __init__, attribute harus di-set manual setelah object dibuat — mudah lupa.
Kenapa nama class PascalCase?
Konvensi PEP 8 agar mudah dibedakan dari fungsi/variabel (snake_case).
Berapa banyak object yang boleh dibuat?
Sebanyak yang dibutuhkan program (dan memori komputer). Class tidak membatasi jumlah instance.
Kesimpulan & langkah berikutnya
Class adalah cetakan; object adalah hasil NamaClass(...). Tiap instance punya attribute sendiri dan identitas sendiri (id / is). Method memberi perilaku yang melekat pada object lewat self.
Artikel ini adalah #41 (ini) — langkah kedua Seri 3 setelah Mengenal OOP (#40). Kamu sudah bisa menulis class, membuat beberapa object, dan membedakan isi vs identitas.
Lanjut ke artikel berikutnya — Attribute, Method, dan Constructor __init__: kita bedah self lebih dalam, method yang mengubah state, dan kesalahan klasik saat parameter tertukar. (Belum di-hyperlink sampai artikel itu live.)
Seri 3 progress: 2/10 artikel (setelah #41 live). Prasyarat: Mengenal OOP (#40).