Pendahuluan
Pada pertemuan yang lalu kita telah membahas tentang static variable atau yang biasa disebut juga sebagai class variable, di mana ia merupakan variabel yang disandarkan kepada sebuah class
alih-alih disandarkan kepada objek atau instan dari kelas tersebut.
Sehingga untuk mengaksesnya, kita tidak perlu melakukan pembuatan instan, kita bisa akses saja secara langsung dari kelas yang bersangkutan.
Perhatikan contoh berikut:
>>> class Mahasiswa:
... jenjang = 'S1'
>>> Mahasiswa.jenjang
'S1'
>>>
Nah, pada kesempatan kali ini, kita akan membahas hal yang serupa dengan static variable: yaitu static method.
Apa itu static method?
Static method di dalam python adalah sebuah fungsi atau method pada sebuah kelas yang bersifat statis. Bersifat statis di sini berarti kita bisa memanggil fungsi tersebut secara langsung tanpa harus membuat instan dari kelas yang bersangkutan.
Selain itu, static method hanya memiliki informasi sebatas dari parameter yang ia terima, ia tidak akan memiliki informasi tambahan tentang kelas apa yang dia ada di dalamnya (berbeda dengan classmethod).
Membuat static method pada python
Untuk membuat static method pada python, kita perlu mendefinisikan decorator @staticmethod
tepat di atas fungsi yang ingin kita jadikan statis.
Perhatikan contoh berikut:
class Konversi:
@staticmethod
def satuan_ke_lusin(n):
return n / 12
Cara memanggilnya:
>>> Konversi.satuan_ke_lusin(24)
2.0
>>> Konversi.satuan_ke_lusin(36)
3.0
>>>
Kita juga bisa memanggilnya via instan dari kelas yang bersangkutan:
>>> konverter = Konversi()
>>> konverter.satuan_ke_lusin(42)
3.5
Sampai sini sebenarnya fungsi statis itu “terlihat” sama seperti fungsi biasa, hanya saja cara pemanggilannya harus menyebutkan nama kelasnya terlebih dahulu.
Kapan harus menggunakan static method?
Pertanyaan yang penting untuk dijawab adalah: kapan kita seharusnya menggunakan static method pada python?
Ada beberapa kondisi, di antaranya:
1. Membuat fungsi utilitas pada sebuah kelas
Static method bersifat terbatas. Ia tidak memiliki informasi tambahan kecuali hanya parameter yang ia terima.
Dan ketika kita merasa sebuah method hanya bersifat “utilitas” dan ia tidak membutuhkan properti dari kelas tersebut, di saat itulah kita bisa menggunakan static method.
Perhatikan contoh berikut:
class Mahasiswa:
def __init__(self, nama):
self.__nama = nama
def getNama(self):
return self.__nama
@staticmethod
def hurufBesar(nama):
return nama.upper()
budi = Mahasiswa('Budi')
print(budi.getNama())
print(Mahasiswa.hurufBesar(budi.getNama()))
# parameter bisa dari luar kelas
print(Mahasiswa.hurufBesar("andi hartanto"))
Jika kita jalankan, kode di atas akan memproduksi output seperti berikut:
Budi
BUDI
ANDI HARTANTO
Kita perhatikan bahwa fungsi Mahasiswa.hurufBesar()
di atas tidak terlalu membutuhkan properti dari kelas Mahasiswa
. Ia hanya membutuhkan sebuah parameter string
, baik dari dalam kelas Mahasiswa
atau pun nilai dari luar yang tidak ada sangkut pautnya dengan kelas Mahasiswa
itu sendiri.
2. Mengumpulkan berbagai fungsi sejenis ke dalam sebuah kelas
Kasus yang kedua adalah kita bisa menggunakan static method jika kita memiliki banyak fungsi sejenis, dan kita ingin mengelompokkannya menjadi satu.
Sebenarnya kita bisa membuat modul / paket python dan mengumpulkan fungsi-fungsi tersebut pada satu tempat. Akan tetapi, kita juga bisa mengumpulkannya dalam sebuah kelas sebagai suatu alternatif.
Perhatikan contoh berikut:
class Konversi:
@staticmethod
def satuan_ke_lusin(n):
return n / 12
@staticmethod
def satuan_ke_klodi(n):
return n / 20
@staticmethod
def satuan_ke_gross(n):
return n / 144
Kita bisa memanggil seperti ini:
n = 54
print(Konversi.satuan_ke_lusin(n))
print(Konversi.satuan_ke_klodi(n))
print(Konversi.satuan_ke_gross(n))
Output:
4.5
2.7
0.375
Pada contoh di atas kita memiliki 3 buah fungsi yang sejenis, yaitu mengkonversi satuan jumlah ke dalam satuan lain. Sehingga mengelompokkan ketiga fungsi tersebut dalam sebuah kelas dengan nama Konversi
menjadi satu hal yang meaningful untuk dilakukan.
3. Ketika kita ingin suatu fungsi tidak ditimpa kelas turunan
Static method juga bisa kita gunakan ketika kita ingin sebuah fungsi tidak akan ditimpa oleh kelas lain yang menjadi kelas turunan [1].
Perhatikan contoh berikut:
class Manusia:
def __init__(self, nama):
self.__nama = nama
def getNama(self):
return self.__nama
@staticmethod
def namaBesar(nama):
return nama.upper()
class LakiLaki(Manusia): # mewarisi Manusia
def __init__(self, nama):
super().__init__(nama)
def getNama(self):
return Manusia.namaBesar(super().getNama())
suwarno = Manusia('suwarno')
print(suwarno.getNama())
sutejo = LakiLaki('sutejo')
print(sutejo.getNama())
Output:
suwarno
SUTEJO
Pada contoh di atas: kita melakukan overriding terhadap fungsi getNama()
, akan tetapi tidak melakukan overriding terhadap fungsi statis namaBesar()
.
Kesimpulan
Dari pertemuan kali ini kita bisa simpulkan beberapa hal:
- Static method kurang lebih hampir sama dengan fungsi biasa, hanya saja ia diletakkan dalam sebuah kelas.
- Static method tidak memiliki informasi apa pun selain dari parameter yang diterimanya.
- Pemanggilan static method bisa dilakukan tanpa harus membuat sebuah instan/objek dari kelas yang bersangkutan.
- Pendefinisian static method menggunakan decorator
@staticmethod
tepat sebelum nama fungsi diinisiasi.
Kode Program Lengkap
Untuk kode program lengkap pada pertemuan kali ini, kalian bisa mendapatkannya di sini.
Pertemuan Selanjutnya
Pada pertemuan selanjutnya insyaallah kita akan membahas tentang class method pada python.
Ia hampir sama dengan static method, hanya saja class method selain menerima informasi dari parameter yang diterimanya, ia juga mendapat tambahan informasi lain mengenai kelas yang ia berada di dalamnya.
Ingin tahu lebih lanjut?
Simak terus tutorial ini, ya! Terima kasih banyak.
Referensi
[1] https://www.programiz.com/python-programming/methods/built-in/staticmethod – diakses tanggal 8 Juni 2021