MulaiMulai sekarang secara gratis

Overloading kesetaraan

Ketika membandingkan dua objek dari kelas kustom menggunakan ==, Python secara bawaan hanya membandingkan referensi objeknya, bukan data yang ada di dalam objek. Untuk menimpa perilaku ini, kelas dapat mengimplementasikan metode khusus __eq__(), yang menerima dua argumen — objek-objek yang akan dibandingkan — dan mengembalikan True atau False. Metode ini akan dipanggil secara implisit ketika dua objek dibandingkan.

Kelas BankAccount dari bab sebelumnya tersedia untuk Anda di panel skrip. Kelas ini memiliki satu atribut, balance, dan metode withdraw(). Dua rekening bank dengan saldo yang sama belum tentu merupakan rekening yang sama, tetapi sebuah rekening bank biasanya memiliki nomor rekening, dan dua rekening dengan nomor rekening yang sama harus dianggap sama.

Latihan ini adalah bagian dari kursus

Pemrograman Berorientasi Objek di Python

Lihat Kursus

Petunjuk latihan

Cobalah memilih kode pada baris 1–7 dan menekan tombol "Jalankan Kode". Lalu coba buat beberapa objek BankAccount di konsol dan bandingkan.

  • Ubah metode __init__() agar menerima parameter baru — number — dan inisialisasi atribut number yang baru.
  • Definisikan metode __eq__() yang mengembalikan True jika atribut number dari dua objek bernilai sama.
  • Periksa pernyataan print dan keluaran di konsol.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

class BankAccount:
   # MODIFY to initialize a number attribute
    def __init__(self, balance=0):
        self.balance = balance
      
    def withdraw(self, amount):
        self.balance -= amount 
    
    # Define __eq__ that returns True if the number attributes are equal 
    def ____(____, ____):
        return ____.number == ____.____   

# Create accounts and compare them       
acct1 = BankAccount(123, 1000)
acct2 = BankAccount(123, 1000)
acct3 = BankAccount(456, 1000)
print(acct1 == acct2)
print(acct1 == acct3)
    
Edit dan Jalankan Kode