Začněte nyníZačněte zdarma

Přetížení operátoru rovnosti

Když porovnáváš dva objekty vlastní třídy pomocí ==, Python ve výchozím nastavení porovnává pouze místa v paměti, na která objekty odkazují, nikoli data v nich uložená. Toto chování lze změnit tak, že třída implementuje speciální metodu, která přijme dva argumenty — porovnávané objekty — a vrátí True nebo False. Tato metoda se zavolá automaticky při každém porovnání dvou objektů.

V souboru script.py je k dispozici třída BankAccount z předchozí kapitoly. Má dva atributy, balance a number, a metodu withdraw(). Dva bankovní účty se stejným zůstatkem nemusí být nutně totožné, ale bankovní účet má zpravidla číslo účtu — a dva účty se stejným číslem by měly být považovány za identické.

Toto cvičení je součástí kurzu

Úvod do objektově orientovaného programování v Pythonu

Zobrazit kurz

Pokyny k cvičení

  • Uprav metodu __init__() tak, aby přijímala nový argument number, a inicializuj odpovídající atribut number.
  • Definuj metodu, která porovná, zda jsou atributy number dvou objektů stejné.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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)
    
Upravit a spustit kód