Överlagring av likhet
När du jämför två objekt av en anpassad klass med == jämför Python som standard bara de minnesplatser som objekten pekar på, inte den data de innehåller. För att ändra det beteendet kan klassen implementera en speciell metod som tar emot två argument – de objekt som ska jämföras – och returnerar True eller False. Den här metoden anropas implicit när två objekt jämförs.
Klassen BankAccount från föregående kapitel finns tillgänglig i script.py. Den har två attribut, balance och number, samt en metod withdraw(). Två bankkonton med samma saldo är inte nödvändigtvis samma konto, men ett bankkonto har vanligtvis ett kontonummer, och två konton med samma kontonummer bör betraktas som identiska.
Den här övningen är en del av kursen
Introduktion till objektorienterad programmering i Python
Övningsinstruktioner
- Ändra metoden
__init__()så att den tar emot ett nytt argument kallatnumberoch initierar ett nytt attributnumber. - Definiera en metod som kontrollerar om attributet
numberär lika för två objekt.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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)