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
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 atributnumberyang baru. - Definisikan metode
__eq__()yang mengembalikanTruejika atributnumberdari 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)