Hari 19: Dunder Methods & Operator Overloading
60 min
Last updated 26 Mar 2026
Apa itu Dunder Methods?
Dunder (double underscore) methods adalah method khusus Python yang dipanggil secara otomatis oleh operator atau fungsi built-in. Juga disebut magic methods.
__str__ & __repr__
class Titik:
def __init__(self, x, y):
self.x, self.y = x, y
def __str__(self): # untuk print() dan str()
return f"({self.x}, {self.y})"
def __repr__(self): # untuk debugging, eval()
return f"Titik({self.x}, {self.y})"
p = Titik(3, 4)
print(p) # (3, 4) — pakai __str__
print(repr(p)) # Titik(3, 4) — pakai __repr__
print([p]) # [Titik(3, 4)] — list pakai __repr__
Operator Overloading
class Vektor:
def __init__(self, x, y):
self.x, self.y = x, y
def __str__(self):
return f"({self.x}, {self.y})"
def __add__(self, other): # v1 + v2
return Vektor(self.x + other.x, self.y + other.y)
def __sub__(self, other): # v1 - v2
return Vektor(self.x - other.x, self.y - other.y)
def __mul__(self, scalar): # v * 3
return Vektor(self.x * scalar, self.y * scalar)
def __rmul__(self, scalar): # 3 * v
return self.__mul__(scalar)
def __len__(self): # len(v) — panjang vektor (int)
return int((self.x**2 + self.y**2) ** 0.5)
def __eq__(self, other): # v1 == v2
return self.x == other.x and self.y == other.y
v1 = Vektor(1, 2)
v2 = Vektor(3, 4)
print(v1 + v2) # (4, 6)
print(v2 - v1) # (2, 2)
print(v1 * 3) # (3, 6)
print(3 * v1) # (3, 6)
print(len(v2)) # 5
Context Manager — __enter__ & __exit__
class Timer:
import time as _time
def __enter__(self):
import time
self._start = time.time()
return self
def __exit__(self, *args):
import time
self.elapsed = time.time() - self._start
print(f"Waktu eksekusi: {self.elapsed:.4f}s")
with Timer():
total = sum(range(1_000_000))
Dunder Lainnya
class KeranjangBelanja:
def __init__(self):
self.items = []
def tambah(self, item):
self.items.append(item)
def __len__(self): # len(keranjang)
return len(self.items)
def __contains__(self, item): # "x" in keranjang
return item in self.items
def __iter__(self): # for item in keranjang
return iter(self.items)
def __getitem__(self, idx): # keranjang[0]
return self.items[idx]
k = KeranjangBelanja()
k.tambah("Apel")
k.tambah("Mangga")
print(len(k)) # 2
print("Apel" in k) # True
for item in k:
print(item)
print(k[0]) # ApelAssignment
Buat class Matriks 2x2 yang mendukung: penjumlahan (+), perkalian skalar (*), transpose (.T property), determinan (.det property), dan representasi string yang rapi.
Expected output:
M1:
| 1 2 |
| 3 4 |
det(M1) = -2
M1 + M2:
| 6 8 |
| 10 12 |
M1 * 3:
| 3 6 |
| 9 12 |
Transpose M1:
| 1 3 |
| 2 4 |
PY
main.py
Solution
Output