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:

python
class Anjing:
    pass

bobi = Anjing()

print(type(bobi))

Output yang Dihasilkan:

text
<class '__main__.Anjing'>

Mari kita telaah baris-baris kode di atas:

  1. Baris 1 (class Anjing:): statement class memerintahkan interpreter Python membuat object class baru bernama Anjing. Nama class kebiasaannya ditulis gaya CapWords seperti BukuPelajaran atau RekeningTabungan.
  2. Baris 2 (pass): body class minimal berisi satu statement; pass berperan sebagai penanda tempat kosong.
  3. Baris 4 (bobi = Anjing()): tanda kurung setelah nama class berarti memanggil class tersebut. Interpreter membuat object baru dari cetak biru Anjing, lalu mengikat nama bobi ke object itu.
  4. Baris 6 (print(type(bobi))): fungsi type() 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:

python
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:

text
Bobi
3
Bobi bersuara: Guk guk!

Mari kita telaah baris-baris kode di atas:

  1. Baris 2 (def menggonggong(self):): method didefinisikan persis seperti fungsi, hanya saja berada di dalam body class. Parameter pertamanya selalu self — nama konvensi untuk “object yang memanggil method ini”.
  2. Baris 3 (print(self.nama + ...)): ekspresi self.nama membaca attribute nama milik object pemanggil. Method bekerja tanpa perlu tahu object mana yang akan memanggilnya.
  3. Baris 6-7 (bobi.nama = "Bobi" dst.): assignment pada bobi.nama membuat attribute yang menempel langsung pada object bobi.
  4. Baris 11 (bobi.menggonggong()): pemanggilan method menjalankan kode di dalam class dengan self terikat ke bobi, sehingga self.nama bernilai "Bobi".

Satu class bisa melahirkan banyak object yang saling mandiri:

python
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:

text
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:

python
print(type(42))
print(type("halo"))
print(type([1, 2, 3]))
print(type(max))
print(isinstance(42, object))

Output yang Dihasilkan:

text
<class 'int'>
<class 'str'>
<class 'list'>
<class 'builtin_function_or_method'>
True

Angka 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.