Class & Object di Python
Python mendukung Object-Oriented Programming (OOP). Class adalah blueprint, object adalah instance dari class.
Membuat Class
class Mahasiswa:
def __init__(self, nama, nim):
self.nama = nama
self.nim = nim
self.nilai = []
def tambah_nilai(self, nilai):
self.nilai.append(nilai)
def rata_rata(self):
if len(self.nilai) == 0:
return 0
return sum(self.nilai) / len(self.nilai)
def __str__(self):
return f"{self.nama} ({self.nim})"
Menggunakan Class
mhs = Mahasiswa("Budi", "123456")
mhs.tambah_nilai(85)
mhs.tambah_nilai(90)
print(mhs) # Budi (123456)
print(mhs.rata_rata()) # 87.5
self
self merujuk ke instance saat ini (mirip this di JavaScript). Selalu jadi parameter pertama di method.
Dunder Methods (Magic Methods)
Dunder = double underscore. Method yang diapit __ seperti __init__ dipanggil otomatis oleh Python pada situasi tertentu (bikin objek, bandingkan, print, dll.). Dengan meng-override dunder, class kamu bisa berperilaku seperti tipe bawaan Python.
__init__ — Constructor
Sudah kita pakai di atas. Dipanggil otomatis saat Kelas(...).
__str__ vs __repr__
__str__— untuk user. Dipanggil olehstr(obj)danprint(obj). Fokus keterbacaan.__repr__— untuk developer. Dipanggil olehrepr(obj)dan ditampilkan di REPL. Idealnya bisa di-copy-paste jadi kode untuk rekonstruksi.
__eq__ — Equality (==)
Tanpa __eq__, dua objek dianggap sama hanya jika identitasnya sama (memory address). Override untuk perbandingan berdasarkan nilai.
__len__ — Mendukung len()
Bikin class bisa dipakai dengan fungsi bawaan len().
__add__ — Operator +
Override + agar objek bisa dijumlahkan.
Contoh Lengkap: Vector Class
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"({self.x}, {self.y})" # untuk user
def __repr__(self):
return f"Vector({self.x}, {self.y})" # untuk debug
def __eq__(self, other):
return self.x == other.x and self.y == other.y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __len__(self):
# panjang "simbolik" — jumlah komponen
return 2
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1) # (1, 2) ← __str__
print(repr(v1)) # Vector(1, 2) ← __repr__
print(v1 + v2) # (4, 6) ← __add__
print(v1 == Vector(1, 2)) # True ← __eq__
print(len(v1)) # 2 ← __len__
Dunder lain yang sering berguna: __lt__/__gt__ (comparison), __hash__ (agar bisa jadi key dict), __iter__ (iterable), __contains__ (operator in), __getitem__ (akses obj[i]).