← Kembali ke kursus
Pelajaran kursus · Python
Pelajaran 27

Class attribute, @classmethod, @staticmethod

Data dan fungsi milik class, bukan objek individual.

Pahami konsepnya

Class attribute dibagikan semua objek: class Siswa: jumlah = 0 — setiap objek melihat nilai yang sama. Instance attribute (self.nama) milik objek masing-masing. Perbedaan penting: mengubah ClassNama.jumlah mengubah untuk semua; mengubah self.jumlah menciptakan salinan local untuk objek itu.

@classmethod menerima cls (class itu sendiri) alih-alih self — berguna untuk alternative constructor: from_string("Ari,17") membuat objek dari teks. @staticmethod tidak menerima self/cls sama sekali — fungsi biasa yang kebetulan tinggal di class, cocok untuk utilitas.

Urutan pencarian: Python mencari atribut di instance dulu, lalu class, lalu parent class. Karena itu objek bisa menimpa class attribute tanpa mengganggu yang lain.

Coba contoh kode

class Siswa:
    jumlah = 0  # class attribute — dibagi semua

    def __init__(self, nama):
        self.nama = nama
        Siswa.jumlah += 1

    @classmethod
    def dari_string(cls, teks):
        nama = teks.split(",")[0]
        return cls(nama)

    @staticmethod
    def valid(nama):
        return len(nama) >= 2

ari = Siswa("Ari")
budi = Siswa("Budi")
citra = Siswa.dari_string("Citra,17")
print(Siswa.jumlah)          # 3
print(Siswa.valid("A"))     # False

Class attribute jumlah bertambah tiap __init__ berjalan — penghitung objek yang elegan. @classmethod dari_string adalah alternative constructor dari teks. @staticmethod valid tidak butuh self — fungsi utilitas murni.

Latihan singkat

Uji: class counter — 3 objek, cetak Siswa.jumlah, harus `3`.