Class, Instance, dan Static Method pada Python
Ketika kita membuat method di dalam kelas dengan parameter self, itulah instance method. Untuk mengubahnya menjadi metode kelas, paling mudah kita gunakan decorator @classmethod
. Metode kelas menerima kelas itu sebagai argumen pertama implisit, umumnya diberi nama cls
.
Metode kelas berbeda dengan metode statis di Java dan C++. Jika ingin menggunakannya, gunakan @staticmethod
. Static method tidak menerima argumen pertama implisit. Ia tidak mengetahui state kelas itu.
Class method dan static method bisa dipanggil pada kelas (misalnya C.f()
) atau pada instansi (misalnya C().f()
). Hindari memanggil metode kelas dari instansi.
Bingung? Lihat contoh yang saya ambil dan adaptasi dari dokumentasi resmi.
from datetime import today
class Dog:
kind = 'canine' # variabel kelas yang bisa diakses semua instansi
def __init__(self, name, age):
self.name = name # variabel instansi, unik untuk tiap instansi
self.age = age
def woof(self):
# Metode instansi
return f'Woof! I am {self.name} and {self.age} years old'
@classmethod
def fromBirthYear(cls, name, year):
return cls(name, date.today().year - year)
@staticmethod
def isLargeBreed(weight):
return weight >= 50 # dalam pon
@classmethod
def getKind(cls):
return cls.kind
Membuat obyek Anjing baru dengan cara biasa dan dari tahun kelahiran anjing itu:
fido = Dog('Fido', 1)
print(fido.woof())
rex = Dog.fromBirthYear('Rex', 2017)
print(rex.woof())
Atau kita hanya mau tahu apakah anjing tertentu tergolong ras besar atau kecil dari beratnya dalam pon (misal 80 pon). Tidak perlu pakai acara membuat obyek baru.
print(Dog.isLargeBreed(80)) # True
Sekarang coba pahami contoh di bawah:
print(Dog.getKind())
print(Dog.kind)
print(fido.kind)
Dog.kind = 'feline'
print(rex.kind)