Sejauh ini kita menyimpan data dalam variabel dan struktur data, lalu mengolahnya lewat fungsi-fungsi terpisah. Seiring program membesar, data dan perilaku yang mengurusnya menyebar ke banyak tempat — satu kesalahan pengetikan nama key dictionary bisa membuat fungsi gagal jauh dari lokasi kesalahan. Object-oriented programming (OOP) menawarkan jalan keluarnya: mengikat data (attribute) dan perilaku (method) dalam satu wadah bernama class. Section ini membangun pemahaman OOP secara bertahap, dan Chapter pertamanya menjawab pertanyaan paling mendasar: apa itu class, apa itu object, dan bagaimana keduanya bekerja di Python.
Class sebagai Cetak Biru #
Class adalah cetak biru (blueprint) yang mendefinisikan bentuk data dan perilaku; object adalah wujud nyata yang dibuat dari cetak biru tersebut. Analoginya seperti rancangan rumah versus rumah yang berdiri: satu rancangan bisa dipakai membangun banyak rumah, dan mengecat satu rumah tidak mengubah rumah lain. Batas analogi ini perlu dinyatakan jelas — class bukan sekadar gambar pasif; class juga menyimpan data bersama yang akan kita bahas pada Chapter Class Attributes.
Bentuk class paling sederhana di Python:
class Anjing:
pass
bobi = Anjing()
print(type(bobi))Output yang Dihasilkan:
<class '__main__.Anjing'>Mari kita telaah baris-baris kode di atas:
- Baris 1 (
class Anjing:): statementclassmemerintahkan interpreter Python membuat object class baru bernamaAnjing. Nama class kebiasaannya ditulis gaya CapWords sepertiBukuPelajaranatauRekeningTabungan. - Baris 2 (
pass): body class minimal berisi satu statement;passberperan sebagai penanda tempat kosong. - Baris 4 (
bobi = Anjing()): tanda kurung setelah nama class berarti memanggil class tersebut. Interpreter membuat object baru dari cetak biruAnjing, lalu mengikat namabobike object itu. - Baris 6 (
print(type(bobi))): fungsitype()memperlihatkan class asal sebuah object. Prefiks__main__menandakan class didefinisikan di file yang sedang dijalankan.
Object yang dibuat dari sebuah class disebut instance dari class tersebut. Istilah object dan instance sering dipakai bergantian; kata “instance” menegaskan asal-usul object dari class tertentu.
Attribute dan Behavior #
Class menjadi berguna ketika menyimpan dua hal: attribute (data yang menempel pada object) dan behavior (perilaku, diwujudkan sebagai method). Perhatikan class Anjing berikut:
class Anjing:
def menggonggong(self):
print(self.nama + " bersuara: Guk guk!")
bobi = Anjing()
bobi.nama = "Bobi"
bobi.umur = 3
print(bobi.nama)
print(bobi.umur)
bobi.menggonggong()Output yang Dihasilkan:
Bobi
3
Bobi bersuara: Guk guk!Mari kita telaah baris-baris kode di atas:
- Baris 2 (
def menggonggong(self):): method didefinisikan persis seperti fungsi, hanya saja berada di dalam body class. Parameter pertamanya selaluself— nama konvensi untuk “object yang memanggil method ini”. - Baris 3 (
print(self.nama + ...)): ekspresiself.namamembaca attributenamamilik object pemanggil. Method bekerja tanpa perlu tahu object mana yang akan memanggilnya. - Baris 6-7 (
bobi.nama = "Bobi"dst.): assignment padabobi.namamembuat attribute yang menempel langsung pada objectbobi. - Baris 11 (
bobi.menggonggong()): pemanggilan method menjalankan kode di dalam class denganselfterikat kebobi, sehinggaself.namabernilai"Bobi".
Satu class bisa melahirkan banyak object yang saling mandiri:
class Anjing:
def menggonggong(self):
print(self.nama + " bersuara: Guk guk!")
bobi = Anjing()
bobi.nama = "Bobi"
rocky = Anjing()
rocky.nama = "Rocky"
bobi.menggonggong()
rocky.menggonggong()Output yang Dihasilkan:
Bobi bersuara: Guk guk!
Rocky bersuara: Guk guk!Dua object lahir dari cetak biru yang sama, tetapi attribute nama masing-masing terpisah. Mengubah bobi.nama tidak akan menyentuh rocky.nama — mekanisme penyimpanan per-object ini dibedah tuntas pada Chapter Instance Attributes.
Semuanya adalah Object #
Python punya prinsip yang sangat konsisten: semua nilai adalah object, termasuk yang terlihat paling sederhana:
print(type(42))
print(type("halo"))
print(type([1, 2, 3]))
print(type(max))
print(isinstance(42, object))Output yang Dihasilkan:
<class 'int'>
<class 'str'>
<class 'list'>
<class 'builtin_function_or_method'>
TrueAngka 42, string, list, bahkan fungsi bawaan max — semuanya adalah instance dari sebuah class. Baris terakhir membuktikan klaim ini: isinstance(42, object) bernilai True karena setiap class pada akhirnya diturunkan dari class dasar object. Kalimat “semuanya adalah object” bukan slogan, melainkan fakta yang bisa diperiksa setiap saat dengan type() dan isinstance().
Prinsip ini juga menjelaskan hal-hal yang sudah lama kita pakai di sepanjang course: "halo".upper() dan daftar.append(...) bekerja karena str dan list adalah class yang mendefinisikan method upper() dan append(). Class Anjing yang kita tulis sendiri berdiri di barisan yang sama dengan class bawaan Python — itulah mengapa OOP bukan fitur tambahan, melainkan cara Python melihat seluruh dunianya.