Method & Property — Python

Method & Property Instance Method Method biasa yang mengakses self: class Circle: def __init__(self, radius): self.radius = radius def area(self): return 3.1415

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:

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.

Yang akan kamu pelajari