Overloading kesetaraan
Saat membandingkan dua objek dari kelas kustom menggunakan ==, Python secara bawaan hanya membandingkan lokasi memori yang ditunjuk oleh objek tersebut, bukan data yang dikandung objek. Untuk menimpa perilaku ini, kelas dapat mengimplementasikan sebuah metode khusus yang menerima dua argumen, yaitu 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 script.py. Kelas ini memiliki dua atribut, balance dan number, serta 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 seharusnya dianggap sama.
Latihan ini adalah bagian dari kursus
Pengantar Pemrograman Berorientasi Objek di Python
Petunjuk latihan
- Ubah metode
__init__()agar menerima argumen baru bernamanumberdan inisialisasi atributnumberyang baru. - Definisikan sebuah metode untuk membandingkan apakah atribut
numberdari dua objek bernilai sama.
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)