Soal 1Mana berikut ini yang merupakan cara yang benar untuk mendefinisikan class Python?
Class dan Instance — Mendefinisikan Tipe Sendiri
Pelajari class dan instance Python dari nol. Telusuri definisi class, peran self, dan pemakaian __init__ untuk menetapkan atribut — semua dengan diagram.
Seperti yang kita singgung di rangkuman sebelumnya, tipe bawaan seperti int, str, list, dan dict tidak bisa langsung merepresentasikan konsep bisnis seperti "user," "product," atau "order." Langkah berikutnya adalah mendefinisikan tipe sendiri dengan class — itulah pintu masuk ke pemrograman berorientasi objek (OOP).
Mengapa Pemrograman Berorientasi Objek?
Semua yang kamu tulis sejauh ini bersifat prosedural — menggabungkan fungsi-fungsi untuk menggerakkan perilaku. Seiring program tumbuh, data terkait dan logika yang mengoperasikannya cenderung tersebar, dan perubahan serta pemakaian ulang menjadi lebih sulit.
Dengan pemrograman berorientasi objek (OOP), kamu membungkus data terkait (atribut) dan operasi terhadapnya (method) menjadi satu unit — sebuah objek. Itu memungkinkan kamu membentuk kode di sekitar konsep dunia nyata.
function(data). OOP meletakkan keduanya di dalam objek sehingga hidup berdampingan.Class Adalah Blueprint, Instance Adalah Wujud Nyata
Dua istilah menjadi pijakan semua hal di OOP:
- Class — sebuah blueprint yang mendaftarkan atribut dan method yang akan kamu miliki
- Instance — wujud nyata yang dibangun dari blueprint tersebut
Misalnya, definisikan class Product untuk menangkap konsep produk, dan kamu bisa memunculkan instance produk individu sebanyak yang kamu butuhkan — apple, banana, orange. Bersama-sama, class dan instance disebut objek.
Mendefinisikan Class Minimal
Mari kita definisikan class Product untuk item di toko. Sintaksnya adalah class NamaClass:. Berdasarkan konvensi, nama class Python menggunakan CapitalizedCamelCase (Product, UserAccount, dll.).
Variabel yang ditulis langsung di dalam class — seperti name = "apple" — diperlakukan sebagai nilai default yang dimiliki class, dan kamu bisa membacanya melalui nama class sebagai Product.name.
class Product:
name = "apple"
price = 150
# Akses langsung lewat class
print(Product.name) # apple
print(Product.price) # 150
class — name / price — menempel pada class itu sendiri dan bisa dibaca langsung lewat nama class sebagai Product.name.Variabel yang ditulis langsung di bawah class disebut variabel class. Mereka berperilaku berbeda dari variabel instance (yang dimiliki masing-masing instance secara terpisah), tetapi kita akan kembali ke perbedaan itu di artikel berikutnya. Untuk sekarang, yang kamu butuhkan hanyalah ide minimal: "tempelkan nilai pada class itu sendiri, lalu baca sebagai Product.name."
Gunakan __init__ untuk Memberi Setiap Instance Nilainya Sendiri
Class minimal di atas hanya menempelkan nilai tetap seperti name = "apple" pada class, jadi setiap instance yang kamu bangun akan menjadi "apple." Pada kode nyata, kamu ingin banyak instance dari satu class — apple, banana, orange — masing-masing dengan nilainya sendiri.
Alat untuk ini adalah method khusus Python __init__ — juga dikenal sebagai constructor atau initializer. Saat kamu memanggil Product("apple", 150) dengan argumen, Python otomatis memanggil __init__, dan di dalamnya kamu menulis self.name = name untuk menyimpan nilai pada instance itu sendiri.
Double Underscore — Konvensi Python
Nama yang dibungkus double underscore seperti __init__ disebut dunder method. Python memberi mereka makna khusus dan memanggilnya secara otomatis pada momen tertentu — __init__ saat instance dibuat, __str__ saat sesuatu dicetak, dan seterusnya. Kita akan membahas __init__ lebih dalam dan menjumpai __del__ di artikel berikutnya.
Product("apple", 150) membuat Python ① menyiapkan instance kosong, ② mengopernya ke __init__ sebagai self, dan ③ menulis argumen ke atribut instance tersebut — meninggalkan kamu dengan objek yang sudah jadi.class Product:
def __init__(self, name, price): # Dipanggil otomatis saat instance dibuat
self.name = name
self.price = price
apple = Product("apple", 150)
banana = Product("banana", 80)
print(apple.name, apple.price) # apple 150
print(banana.name, banana.price) # banana 80
# apple dan banana adalah objek berbeda
print(apple is banana) # False
Product(...) membuat objek terpisah. apple, banana, dan orange semuanya berasal dari blueprint yang sama tetapi merupakan objek berbeda, masing-masing dengan name / price-nya sendiri.Cara Method dan self Bekerja
Atribut saja hanya "menyimpan data" — tidak banyak berbeda dari dict biasa. Inti sebenarnya dari OOP adalah kamu juga bisa menulis operasi pada instance berdampingan dengan data. Operasi-operasi tersebut disebut method.
def adalah method. Parameter pertama self wajib, dan pada setiap panggilan Python mengisinya dengan instance yang memanggil method tersebut. Di dalam method, tulis self.name untuk mengakses atribut instance itu.Saat kamu menulis apple.show(), Python secara internal sedang menjalankan Product.show(apple) — self akhirnya memegang apple.
- apple dan banana adalah instance terpisah
- Saat kamu memanggil
apple.show()…
- self diisi dengan apple secara otomatis
self.namemembaca apple.name- Untuk
banana.show(),selfmenjadibanana
show yang sama, memanggil dari apple membaca name milik apple, memanggil dari banana membaca milik banana.class Product:
def __init__(self, name, price):
self.name = name
self.price = price
def show(self): # Parameter pertama selalu self
print(f"{self.name}: ${self.price}")
apple = Product("apple", 150)
banana = Product("banana", 80)
apple.show() # apple: $150 secara internal sama dengan Product.show(apple)
banana.show() # banana: $80 secara internal sama dengan Product.show(banana)
apple.show() menempatkan apple ke self, sedangkan memanggil banana.show() menempatkan banana ke self. Method show yang sama berjalan dengan self berbeda setiap kali, tergantung pemanggil.self Hanyalah Konvensi
Secara sintaks, parameter pertama bisa apa saja — def show(this): juga bekerja. Tetapi hampir semua kode Python menggunakan self, jadi tetap pakai itu. Apa pun yang lain akan membingungkan pembaca.
Pada artikel ini kamu mendapatkan dasar pemrograman berorientasi objek. Kita akan membahas variabel dan method lebih dalam di artikel-artikel selanjutnya.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Apa yang dioper otomatis ke parameter pertama method self saat dipanggil?
Soal 3Apa yang dicetak oleh kode berikut?class P: def __init__(self, x): self.x = xa = P(10)b = P(20)print(a.x + b.x)