Pengantar Magic method
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Python di Coddy. Pelajaran 33 dari 64.
Magic method (juga disebut dunder method) adalah method khusus dengan garis bawah ganda di awal dan akhir. Python memanggilnya secara otomatis sebagai respons terhadap operasi tertentu.
Berikut contoh class dengan method ajaib:
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return f"{self.title} by {self.author}"method __init__ dipanggil secara otomatis saat kamu membuat object:
my_book = Book("Python Programming", "John Smith", 350)method __str__ dipanggil otomatis saat kamu mengonversi object menjadi string:
print(my_book) # Memanggil __str__ secara otomatis
print(str(my_book)) # Juga memanggil __str__Output:
Python Programming by John Smith
Python Programming by John SmithTanpa __str__, mencetak object akan menampilkan lokasi memori object:
class SimpleBook:
def __init__(self, title):
self.title = title
simple = SimpleBook("Test Book")
print(simple) # <__main__.SimpleBook object at 0x...>Tambahkan method magic lain untuk panjang:
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return f"{self.title} by {self.author}"
def __len__(self):
return self.pages
my_book = Book("Python Programming", "John Smith", 350)
print(len(my_book)) # Memanggil __len__ secara otomatisOutput:
350Poin penting: Magic method diawali dan diakhiri dengan garis bawah ganda (__method__) dan dipanggil secara otomatis oleh Python. Magic method memungkinkan object-mu bekerja dengan fungsi bawaan seperti str(), len(), dan operator, sehingga class-mu lebih sesuai dengan gaya Python dan intuitif untuk digunakan.
Tantangan
MudahDalam tantangan ini, kamu akan mengimplementasikan class Counter dengan magic method.
counter.py- Ini adalah file yang perlu kamu edit. File ini berisi komentar TODO untuk memandu implementasimu.driver.py- Berisi banyak kasus uji.
Terapkan class Counter di counter.py dan kasus uji di driver.py dengan mengikuti komentar TODO. Class ini harus mendukung inisialisasi dengan nilai opsional, representasi string, dan operasi penjumlahan.
Coba sendiri
# TODO: Impor class Counter dari counter.py
# Gunakan format: from counter import Counter
# Penangan kasus uji yang menyeluruh
test_case = input()
if test_case == "init_test":
# TODO: Uji inisialisasi dengan nilai bawaan
# Buat penghitung tanpa argumen, lalu cetak
# Output yang diharapkan: "Count: 0"
pass
elif test_case == "init_with_value":
# TODO: Uji inisialisasi dengan nilai tertentu
# Buat penghitung dengan nilai awal 10, lalu cetak
# Catatan: print() memanggil __str__ secara implisit, tetapi fokus kita di sini adalah menguji __init__
# Output yang diharapkan: "Count: 10"
pass
elif test_case == "addition":
# TODO: Uji operasi penjumlahan
# Buat penghitung dengan nilai 3, tambahkan 7, lalu cetak hasilnya
# Output yang diharapkan: "Count: 10"
pass
elif test_case == "chained_addition":
# TODO: Uji operasi penjumlahan berantai
# Buat counter bernilai 1, tambahkan 2, lalu tambahkan 3 ke hasilnya, dan cetak hasilnya
# Output yang diharapkan: "Count: 6"
pass
elif test_case == "negative_values":
# TODO: Uji dengan nilai negatif
# Buat counter bernilai -5 dan cetak
# Lalu tambahkan -3 ke counter tersebut dan cetak hasilnya
# Output yang diharapkan: "Count: -5" dan "Count: -8"
pass
elif test_case == "zero_value":
# TODO: Uji dengan nilai nol
# Buat counter bernilai 0, tambahkan 0, dan cetak hasilnya
# Output yang diharapkan: "Count: 0"
pass
elif test_case == "large_values":
# TODO: Uji dengan nilai besar
# Buat counter bernilai 1000000 dan tambahkan 9000000
# Output yang diharapkan: "Count: 10000000"
pass
elif test_case == "multiple_counters":
# TODO: Uji interaksi antara beberapa counter
# Buat counter1 bernilai 5 dan counter2 bernilai 10
# Cetak kedua counter
# Output yang diharapkan: "Count: 5" dan "Count: 10"
pass
elif test_case == "type_validation":
# TODO: Uji penambahan berbagai tipe data
# Coba tambahkan float (2.5) ke counter bernilai 5
# Output yang diharapkan: "Count: 7.5"
passPelajaran 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 Karyawan7Special method
Pengantar Magic methodOverloading OperatorMagic method untuk wadahUlasan: list khusus5Polimorfisme
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