Apps Artificial Intelligence CSS DevOps Go JavaScript Laravel Linux MongoDB MySQL PHP Python Rust Vue

Memahami Perbedaan `@staticmethod` dan `@classmethod` di Python

2 min read .
Memahami Perbedaan `@staticmethod` dan `@classmethod` di Python

Python adalah bahasa pemrograman serbaguna yang menawarkan banyak fitur fleksibel. Dua di antaranya adalah dekorator @staticmethod dan @classmethod, yang dapat diterapkan pada metode dalam sebuah kelas. Meskipun keduanya digunakan untuk mendefinisikan metode yang tidak terkait dengan instance kelas, masing-masing memiliki tujuan dan perilaku yang berbeda. Panduan ini akan menjelaskan perbedaan utama antara @staticmethod dan @classmethod, serta kapan dan bagaimana menggunakannya.

1. Apa Itu @staticmethod?

@staticmethod adalah metode yang milik kelas, tetapi tidak membutuhkan akses ke data spesifik instance (self). Artinya, metode ini bisa dipanggil langsung dari kelas tanpa harus membuat objek dari kelas tersebut.

Contoh:

class MyClass:
    @staticmethod
    def static_method():
        return "Ini adalah static method."

# Memanggil static method
print(MyClass.static_method())  # Output: Ini adalah static method.

Poin Penting:

  • Static method tidak menerima argumen pertama secara implisit.
  • Tidak dapat mengakses atau mengubah state kelas atau instance.
  • Biasanya digunakan untuk fungsi utilitas yang berada di dalam namespace kelas.

2. Apa Itu @classmethod?

@classmethod adalah metode yang terikat ke kelas, bukan ke instance. Argumen pertama dari metode kelas biasanya cls, yang merepresentasikan kelas itu sendiri. Ini memungkinkan metode untuk mengakses dan memodifikasi atribut kelas yang berlaku untuk semua instance.

Contoh:

class MyClass:
    class_variable = "Variabel Kelas"

    @classmethod
    def class_method(cls):
        return f"Nilai variabel kelas: {cls.class_variable}"

# Memanggil class method
print(MyClass.class_method())  # Output: Nilai variabel kelas: Variabel Kelas

Poin Penting:

  • Class method menerima kelas (cls) sebagai argumen pertama.
  • Dapat memodifikasi atribut level kelas.
  • Sering digunakan sebagai factory method, yaitu metode alternatif untuk membuat objek.

3. Perbedaan Utama Antara @staticmethod dan @classmethod

Aspek @staticmethod @classmethod
Binding Tidak terikat ke kelas maupun instance Terikat ke kelas
Argumen pertama Tidak ada cls (kelas itu sendiri)
Tujuan Fungsi utilitas yang tidak bergantung pada kelas atau instance Metode yang bekerja pada kelas, seperti alternatif constructor atau modifikasi atribut kelas
Akses data kelas/instance Tidak Bisa mengakses atribut kelas

4. Contoh Praktis

Alternatif Constructor dengan @classmethod:

class MyClass:
    def __init__(self, value):
        self.value = value

    @classmethod
    def from_string(cls, value_str):
        value = int(value_str)
        return cls(value)

obj = MyClass.from_string("10")
print(obj.value)  # Output: 10

Di sini, from_string berfungsi sebagai constructor alternatif yang membuat instance dari string.

Fungsi Utilitas dengan @staticmethod:

class MathOperations:
    @staticmethod
    def add(x, y):
        return x + y

result = MathOperations.add(5, 10)
print(result)  # Output: 15

Di sini, add adalah metode statis yang tidak bergantung pada instance atau data kelas.

5. Kesimpulan

Memahami perbedaan antara @staticmethod dan @classmethod penting untuk menulis kode Python yang bersih, efisien, dan mudah dipelihara. @staticmethod cocok untuk fungsi utilitas yang tidak membutuhkan akses ke data kelas atau instance, sementara @classmethod ideal untuk metode yang berinteraksi dengan kelas itu sendiri, termasuk membuat constructor alternatif atau memodifikasi atribut kelas.

Lihat Juga

chevron-up