Menu
CoddyTech

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 Smith

Tanpa __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 otomatis

Output:

350

Poin 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.

challenge icon

Tantangan

Mudah

Dalam 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"
    pass
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