Static Method dan Class Method di Python

Post image

Static method dan class method adalah dua jenis method khusus di Python yang sering digunakan dalam OOP. Keduanya punya peran berbeda dari method biasa, dan seringkali membingungkan bagi pemula. Pada artikel ini, kita akan membahas secara mendalam tentang static method dan class method, perbedaannya dengan method biasa, kapan harus menggunakannya, serta berbagai contoh dan studi kasus nyata agar kamu benar-benar paham.

Pengantar: Method Biasa vs Static Method vs Class Method

Sebelum membahas static method dan class method, mari kita pahami dulu apa itu method biasa (instance method).

  • Instance Method: Method yang menerima parameter pertama self, yaitu referensi ke object (instance) yang memanggil method tersebut. Instance method bisa mengakses dan mengubah data object.
  • Class Method: Method yang menerima parameter pertama cls, yaitu referensi ke class, bukan object. Cocok untuk operasi yang berkaitan dengan class, bukan data object tertentu.
  • Static Method: Method yang tidak menerima self maupun cls. Static method tidak bergantung pada object atau class, tapi tetap didefinisikan di dalam class.

Tabel ringkas perbedaannya:

Jenis Method Parameter Pertama Bisa akses data object? Bisa akses data class? Kapan digunakan?
Instance Method self Ya Ya (via self.class) Operasi pada object
Class Method cls Tidak Ya Operasi pada class, factory
Static Method - Tidak Tidak Utility/helper, validasi, dll

Apa Itu Static Method?

Static method adalah method yang tidak bergantung pada object maupun class. Static method tidak menerima parameter self atau cls. Biasanya digunakan untuk fungsi utilitas yang masih berhubungan dengan class, tapi tidak perlu mengakses data object atau class.

Cara Membuat Static Method

Gunakan dekorator @staticmethod di atas method.

class Matematika:
    @staticmethod
    def tambah(a, b):
        return a + b

Contoh Static Method

class Matematika:
    @staticmethod
    def tambah(a, b):
        return a + b

print(Matematika.tambah(3, 4))
7

Penjelasan:

  • @staticmethod digunakan untuk mendekorasi method.
  • Bisa dipanggil tanpa membuat object.
  • Tidak bisa mengakses/mengubah data object maupun class.

Static Method vs Fungsi Biasa

Kenapa tidak buat fungsi di luar class saja? Static method tetap didefinisikan di dalam class agar secara logika masih “berhubungan” dengan class tersebut. Ini membuat struktur kode lebih rapi dan mudah dipahami.

Contoh:

class StringUtil:
    @staticmethod
    def is_palindrome(text):
        return text == text[::-1]

print(StringUtil.is_palindrome("katak"))  # True

Apa Itu Class Method?

Class method adalah method yang menerima parameter cls (class itu sendiri), bukan self (object). Cocok untuk membuat object baru (factory method), mengakses/mengubah data class (bukan data object), atau operasi yang berkaitan dengan class secara umum.

Cara Membuat Class Method

Gunakan dekorator @classmethod di atas method.

class Mahasiswa:
    jumlah = 0

    @classmethod
    def total_mahasiswa(cls):
        return cls.jumlah

Contoh Class Method

class Mahasiswa:
    jumlah = 0

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

    @classmethod
    def total_mahasiswa(cls):
        return cls.jumlah

m1 = Mahasiswa("Budi")
m2 = Mahasiswa("Ani")
print(Mahasiswa.total_mahasiswa())
2

Penjelasan:

  • @classmethod digunakan untuk mendekorasi method.
  • Bisa mengakses/mengubah data class (cls.jumlah).
  • Bisa dipanggil dari class maupun object.

Contoh Factory Method dengan Class Method

Factory method adalah method yang digunakan untuk membuat object dengan cara khusus.

class Buku:
    def __init__(self, judul, penulis):
        self.judul = judul
        self.penulis = penulis

    @classmethod
    def dari_string(cls, data):
        judul, penulis = data.split("-")
        return cls(judul.strip(), penulis.strip())

b1 = Buku.dari_string("Belajar Python - Maslul")
print(b1.judul)
print(b1.penulis)
Belajar Python
Maslul

Penjelasan:

  • dari_string adalah class method yang membuat object dari string.
  • cls digunakan untuk membuat object baru dari class.

Studi Kasus: Static Method dan Class Method dalam Aplikasi Nyata

Mari kita lihat contoh nyata penggunaan static method dan class method dalam aplikasi sederhana.

Studi Kasus 1: Validasi Data dengan Static Method

Misal, kamu ingin membuat class User yang hanya menerima email valid.

class User:
    def __init__(self, email):
        if not self.valid_email(email):
            raise ValueError("Email tidak valid")
        self.email = email

    @staticmethod
    def valid_email(email):
        return "@" in email and "." in email

try:
    u = User("[email protected]")
    print("User dibuat:", u.email)
    u2 = User("salah-email")
except ValueError as e:
    print(e)
User dibuat: [email protected]
Email tidak valid

Penjelasan:

  • Static method valid_email digunakan untuk validasi, tidak butuh akses ke object/class.

Studi Kasus 2: Counter Object dengan Class Method

class Produk:
    total_produk = 0

    def __init__(self, nama):
        self.nama = nama
        Produk.total_produk += 1

    @classmethod
    def info_total(cls):
        print(f"Total produk: {cls.total_produk}")

p1 = Produk("Laptop")
p2 = Produk("Mouse")
Produk.info_total()
Total produk: 2

Penjelasan:

  • Class method info_total mengakses data class, bukan data object.

Studi Kasus 3: Factory Method untuk Berbagai Format Data

class Mahasiswa:
    def __init__(self, nama, nim):
        self.nama = nama
        self.nim = nim

    @classmethod
    def dari_dict(cls, data):
        return cls(data["nama"], data["nim"])

    @classmethod
    def dari_string(cls, data):
        nama, nim = data.split(",")
        return cls(nama.strip(), nim.strip())

m1 = Mahasiswa.dari_dict({"nama": "Budi", "nim": "123"})
m2 = Mahasiswa.dari_string("Ani, 456")
print(m1.nama, m1.nim)
print(m2.nama, m2.nim)
Budi 123
Ani 456

Static Method, Class Method, dan Instance Method: Perbandingan Kode

class Demo:
    def instance_method(self):
        print("Instance method dipanggil dari object:", self)

    @classmethod
    def class_method(cls):
        print("Class method dipanggil dari class:", cls)

    @staticmethod
    def static_method():
        print("Static method dipanggil tanpa akses object/class")

d = Demo()
d.instance_method()
Demo.class_method()
Demo.static_method()
Instance method dipanggil dari object: <__main__.Demo object at ...>
Class method dipanggil dari class: <class '__main__.Demo'>
Static method dipanggil tanpa akses object/class

Kapan Menggunakan Static Method dan Class Method?

  • Static method: Untuk fungsi utilitas, validasi, konversi, atau operasi yang tidak butuh data object/class.
  • Class method: Untuk operasi yang berkaitan dengan class, seperti factory method, counter object, mengubah data class, dsb.
  • Instance method: Untuk operasi yang butuh data object (umumnya default).

Best Practice dan Tips

No Tips Penjelasan
1 Gunakan static method untuk fungsi yang tidak butuh data object/class Misal: validasi, konversi format
2 Gunakan class method untuk factory method atau operasi pada class Misal: membuat object dari format lain
3 Jangan gunakan static/class method jika butuh akses data object Pakai instance method saja
4 Beri nama method yang jelas sesuai fungsinya Misal: from_json, is_valid, info_total
5 Dokumentasikan method dengan docstring Agar mudah dipahami tim lain

FAQ Seputar Static Method dan Class Method

Q: Apa bedanya static method dan class method?
A: Static method tidak menerima parameter self atau cls, tidak bisa akses data object/class. Class method menerima cls, bisa akses data class.

Q: Bisakah static/class method dipanggil dari object?
A: Ya, tapi best practice: static method/class method dipanggil dari class.

Q: Kapan harus pakai static method, bukan fungsi biasa?
A: Jika fungsi masih relevan secara logika dengan class, letakkan sebagai static method agar struktur kode lebih rapi.

Q: Bisakah static/class method diwariskan?
A: Ya, static method dan class method bisa diwariskan dan di-override di class turunan.

Q: Apa bisa mendekorasi method dengan @staticmethod dan @classmethod sekaligus?
A: Tidak bisa, pilih salah satu sesuai kebutuhan.

Studi Kasus Lanjutan: Static dan Class Method pada Inheritance

class Hewan:
    jenis = "Hewan"

    @classmethod
    def info_jenis(cls):
        print(f"Ini adalah class: {cls.jenis}")

    @staticmethod
    def suara_umum():
        print("Hewan bersuara...")

class Kucing(Hewan):
    jenis = "Kucing"

Kucing.info_jenis()  # Output: Ini adalah class: Kucing
Kucing.suara_umum()  # Output: Hewan bersuara...

Penjelasan:

  • Class method akan mengikuti class pemanggil (polymorphic).
  • Static method tidak berubah, tetap sama di semua class.

Kesalahan Umum Pemula

  • Lupa menambahkan dekorator @staticmethod atau @classmethod.
  • Mengakses self di static/class method (akan error).
  • Mengubah data object di static/class method (tidak bisa).
  • Membuat static method padahal butuh akses data object.

Kesimpulan

Static method dan class method adalah fitur powerful di Python OOP yang membuat class lebih fleksibel dan terorganisir. Dengan memahami perbedaan dan cara penggunaannya, kamu bisa menulis kode yang lebih rapi, modular, dan mudah dirawat. Jangan ragu untuk menggunakan static method untuk fungsi utilitas, dan class method untuk operasi pada class atau factory method.

Teruslah berlatih dan eksperimen dengan berbagai kasus, agar semakin mahir menggunakan static method dan class method di Python!

Happy coding!

comments powered by Disqus

You May Also Like