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 == 0method 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()) # 2Gunakan method pada class sebagai konstruktor alternatif:
anonymous = Person.create_anonymous()
print(anonymous.name) # Anonymous
print(Person.get_count()) # 3Bandingkan 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 * ycalc = Calculator("Alice")
print(calc.show_owner()) # Dimiliki oleh Alice
print(Calculator.get_brand()) # Python Calc
print(Calculator.multiply(4, 5)) # 20Output:
8
True
2
Anonymous
3
Owned by Alice
Python Calc
20Kamu juga bisa memanggil method class dan static dari instance:
calc = Calculator("Bob")
print(calc.get_brand()) # Python Calc
print(calc.multiply(2, 3)) # 6Perbedaan 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.
Tantangan
MudahDalam 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()}")Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass vs objectParameter selfmethodAtributMethod Konstruktor (__init__)Rangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan DasarFungsi super()Penimpaan MethodPewarisan BergandaUrutan Resolusi MethodRingkasan: Hierarki Karyawan5Polimorfisme
Meninjau Ulang Method OverridingDuck Typingclass dan method AbstrakDesain InterfaceRingkasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanMixinsMetode Statis dan Metode ClassDecorator ClassPengelola Konteks11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola Composite3Property class
Variabel instance vs variabel classDekorator propertyAtribut privatRangkuman: Pengelola Rekening Bank6Enkapsulasi
Anggota Public, Protected, PrivateModifier AksesPenyembunyian InformasiDecorator Property Tingkat LanjutUlasan: Sistem Catatan Siswa12Proyek: Manajemen Perpustakaan
Ikhtisar Proyekclass Buku dan PenggunaSistem PeminjamanFitur PencarianAntarmuka AdminPengujian dan IntegrasiLatihan sendiri: Compiler Python online