Class, Instance, dan Static Method pada Python

1184

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)