Eşitliği aşırı yükleme
Özel bir sınıfın iki nesnesini == ile karşılaştırdığında, Python varsayılan olarak nesne başvurularını karşılaştırır; nesnelerin içindeki verileri değil. Bu davranışı geçersiz kılmak için sınıf, iki argüman — karşılaştırılacak nesneler — alan ve True veya False döndüren özel __eq__() metodunu uygulayabilir. Bu metod, iki nesne karşılaştırıldığında örtük olarak çağrılır.
Önceki bölümden BankAccount sınıfı betik bölmesinde senin için hazır. Bir niteliği (balance) ve bir withdraw() metodu var. Aynı bakiyeye sahip iki banka hesabı mutlaka aynı hesap değildir, ancak banka hesaplarının genellikle bir hesap numarası vardır ve hesap numarası aynı olan iki hesap aynı kabul edilmelidir.
Bu egzersiz
Python'da Nesne Yönelimli Programlama
kursunun bir parçasıdırEgzersiz talimatları
Satır 1-7 arasındaki kodu seçip "Kodu Çalıştır" düğmesine basmayı dene. Sonra konsolda birkaç BankAccount nesnesi oluşturup karşılaştırmayı dene.
__init__()metodunu yeni bir parametre —number— kabul edecek şekilde değiştir ve yeni birnumberniteliğini başlat.- İki nesnenin
numberniteliği eşitseTruedöndüren bir__eq__()metodu tanımla. - Yazdırma ifadelerini ve konsoldaki çıktıyı incele.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
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)