Menu
CoddyTech

Metode Statis dan Metode Class

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Python di Coddy. Pelajaran 39 dari 64.

Selain method instance biasa, class dapat memiliki static method dan class method yang memiliki tujuan berbeda.

Berikut contoh static method:

class MathHelper:
    @staticmethod
    def add(a, b):
        return a + b
    
    @staticmethod
    def is_even(number):
        return number % 2 == 0

method statis tidak memerlukan self dan bekerja seperti fungsi biasa. Panggil method tersebut langsung dari class:

result = MathHelper.add(5, 3)
print(result)

check = MathHelper.is_even(10)
print(check)

Berikut contoh method class:

class Person:
    count = 0  # Variabel class
    
    def __init__(self, name):
        self.name = name
        Person.count += 1
    
    @classmethod
    def get_count(cls):
        return cls.count
    
    @classmethod
    def create_anonymous(cls):
        return cls("Anonymous")

Method class menerima class itu sendiri (cls) sebagai parameter pertama:

person1 = Person("Alice")
person2 = Person("Bob")
print(Person.get_count())  # 2

Gunakan method pada class sebagai konstruktor alternatif:

anonymous = Person.create_anonymous()
print(anonymous.name)      # Anonymous
print(Person.get_count())  # 3

Bandingkan ketiga jenis method dalam satu class:

class Calculator:
    brand = "Python Calc"
    
    def __init__(self, owner):
        self.owner = owner
    
    # method instance: memerlukan self dan mengakses data instance
    def show_owner(self):
        return f"Owned by {self.owner}"
    
    # method class: memerlukan cls dan mengakses data class
    @classmethod
    def get_brand(cls):
        return cls.brand
    
    # method statis: tidak memerlukan keduanya, hanya berfungsi sebagai fungsi utilitas
    @staticmethod
    def multiply(x, y):
        return x * y
calc = Calculator("Alice")
print(calc.show_owner())        # Dimiliki oleh Alice
print(Calculator.get_brand())   # Python Calc
print(Calculator.multiply(4, 5)) # 20

Output:

8
True
2
Anonymous
3
Owned by Alice
Python Calc
20

Kamu juga bisa memanggil method class dan static dari instance:

calc = Calculator("Bob")
print(calc.get_brand())      # Python Calc
print(calc.multiply(2, 3))   # 6

Perbedaan utama:

  • Instance method: Memerlukan self, mengakses data instance
  • Class method: Memerlukan cls, mengakses data class, cocok untuk konstruktor alternatif
  • Static method: Tidak memerlukan keduanya, hanya fungsi utilitas yang terkait dengan class

Poin penting: Gunakan @staticmethod untuk fungsi utilitas yang secara logis termasuk dalam class, tetapi tidak memerlukan data class atau instance. Gunakan @classmethod saat kamu perlu mengakses class itu sendiri, misalnya untuk constructor alternatif atau mengakses variabel class.

challenge icon

Tantangan

Mudah

Dalam tantangan ini, kamu akan mengimplementasikan class Temperature dengan fungsi tertentu sambil memanfaatkan framework pengujian yang komprehensif.

Kamu hanya perlu mengedit file temperature.py, dengan mengikuti komentar TODO yang memandu implementasimu. Class ini harus mencakup:

  • Variabel class untuk melacak pembacaan suhu
  • Static method untuk konversi suhu
  • Class method untuk menambahkan pembacaan dan menghitung rata-rata

Coba sendiri

from temperature import Temperature

# Penangan kasus uji untuk pengujian menyeluruh
test_case = input()

if test_case == "default_test":
    # Uji fungsi dasar
    Temperature.celsius_readings = []
    Temperature.add_reading(25)
    Temperature.add_reading(30)
    Temperature.add_reading(27)
    
    print(f"Average reading: {Temperature.average_reading()}")
    print(f"22°C is {Temperature.celsius_to_fahrenheit(22)}°F")

elif test_case == "empty_readings":
    # Uji average_reading tanpa pembacaan
    Temperature.celsius_readings = []
    print(f"Average reading: {Temperature.average_reading()}")

elif test_case == "single_reading":
    # Uji dengan satu pembacaan
    Temperature.celsius_readings = []
    Temperature.add_reading(100)
    print(f"Average reading: {Temperature.average_reading()}")

elif test_case == "negative_values":
    # Uji dengan nilai suhu negatif
    Temperature.celsius_readings = []
    Temperature.add_reading(-10)
    Temperature.add_reading(-20)
    Temperature.add_reading(-30)
    print(f"Average reading: {Temperature.average_reading()}")
    print(f"-15°C is {Temperature.celsius_to_fahrenheit(-15)}°F")

elif test_case == "zero_value":
    # Uji dengan pembacaan 0°C
    print(f"0°C is {Temperature.celsius_to_fahrenheit(0)}°F")

elif test_case == "extreme_values":
    # Uji dengan nilai suhu ekstrem
    absolute_zero = -273.15  # nol mutlak dalam Celsius
    sun_surface = 5500  # perkiraan suhu permukaan Matahari dalam Celsius
    
    print(f"{absolute_zero}°C is {Temperature.celsius_to_fahrenheit(absolute_zero)}°F")
    print(f"{sun_surface}°C is {Temperature.celsius_to_fahrenheit(sun_surface)}°F")

elif test_case == "reset_readings":
    # Uji pengaturan ulang pembacaan
    Temperature.celsius_readings = []
    Temperature.add_reading(10)
    Temperature.add_reading(20)
    Temperature.add_reading(30)
    print(f"Average reading before reset: {Temperature.average_reading()}")
    
    Temperature.celsius_readings = []
    print(f"Average reading after reset: {Temperature.average_reading()}")

elif test_case == "decimal_values":
    # Uji dengan nilai desimal
    Temperature.celsius_readings = []
    Temperature.add_reading(36.5)  # Suhu tubuh normal
    Temperature.add_reading(37.2)  # Demam ringan
    Temperature.add_reading(36.9)  # Variasi normal
    print(f"Average reading: {Temperature.average_reading()}")

elif test_case == "many_readings":
    # Uji dengan banyak pembacaan
    Temperature.celsius_readings = []
    for i in range(1, 101):
        Temperature.add_reading(i)
    print(f"Average reading with 100 values: {Temperature.average_reading()}")
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Python online