Method & Property
Instance Method
Method biasa yang mengakses self:
class Circle:
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14159 * self.radius ** 2
def circumference(self):
return 2 * 3.14159 * self.radius
@property — Getter & Setter
Di Python kita jarang menulis method get_x()/set_x() ala Java. Sebagai gantinya, pakai @property agar method bisa diakses seperti atribut biasa — dengan validasi tersembunyi di baliknya.
class BankAccount:
def __init__(self, balance=0):
self._balance = balance # konvensi: underscore = privat
@property
def balance(self):
"""Getter — dipanggil saat akun.balance diakses."""
return self._balance
@balance.setter
def balance(self, nilai):
"""Setter — dipanggil saat akun.balance = ...."""
if nilai < 0:
raise ValueError("Saldo tidak boleh negatif")
self._balance = nilai
akun = BankAccount(100000)
print(akun.balance) # 100000 — panggil getter
akun.balance = 150000 # panggil setter (validasi OK)
akun.balance = -50 # ValueError!
Dari luar terlihat seperti atribut biasa, tapi di balik layar ada validasi. Pola ini disebut uniform access principle.
@staticmethod vs @classmethod
Keduanya adalah method yang tidak butuh instance, tapi berbeda fungsi:
@staticmethod— tidak menerimaselfmaupuncls. Pada dasarnya fungsi biasa yang disimpan di namespace class.@classmethod— menerimacls(referensi ke class itu sendiri) sebagai parameter pertama. Sering dipakai sebagai alternative constructor.
class Tanggal:
def __init__(self, hari, bulan, tahun):
self.hari = hari
self.bulan = bulan
self.tahun = tahun
@staticmethod
def is_valid_tahun(tahun):
# utility — tidak butuh class atau instance
return 1900 <= tahun <= 2100
@classmethod
def dari_string(cls, s):
# factory method — bikin Tanggal dari "20-04-2026"
hari, bulan, tahun = map(int, s.split("-"))
return cls(hari, bulan, tahun)
# Pakai static method tanpa instance
print(Tanggal.is_valid_tahun(2026)) # True
# Factory pattern via classmethod
t = Tanggal.dari_string("20-04-2026")
print(t.tahun) # 2026
Factory pattern via @classmethod cocok saat ada banyak cara membuat instance — misalnya dari string, dari dict, dari tuple — tanpa mengotori __init__.
Dunder Methods Singkat
Untuk override operator dan protokol bawaan Python (__str__, __eq__, __add__, __len__), lihat pelajaran Class & Object yang sudah membahas dunder methods secara lengkap.