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

Kontrola shody tříd

V předchozím cvičení jsi definoval/a třídu BankAccount s atributem number, který se používal pro porovnávání. Pokud bys ale porovnával/a objekt BankAccount s objektem jiné třídy, která má také atribut number, mohl/a bys dostat neočekávané výsledky.

Podívej se například na tyto dvě třídy:


class Phone:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
          other.number

pn = Phone(873555333)

class BankAccount:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
           other.number

acct = BankAccount(873555333)

Spuštění acct == pn vrátí True, i když porovnáváme telefonní číslo s číslem bankovního účtu.

Dobrá praxe je ověřit třídu objektů předaných metodě __eq__(), aby porovnání dávalo smysl.

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

Object-Oriented Programming in Python

Zobrazit kurz

Pokyny k cvičení

Obě třídy Phone i BankAccount jsou již definované. Spusť kód tlačítkem "Run code" a prohlédni si výstup.

  • Uprav definici třídy BankAccount tak, aby vracela True pouze tehdy, když je atribut number stejný a zároveň je stejný type() obou předaných objektů.

Spusť kód znovu a prohlédni si výstup.

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:
    def __init__(self, number, balance=0):
        self.number, self.balance = number, balance
      
    def withdraw(self, amount):
        self.balance -= amount 

    # MODIFY to add a check for the type()
    def __eq__(self, other):
        return (self.number == other.number)

acct = BankAccount(873555333)
pn = Phone(873555333)
print(acct == pn)
Upravit a spustit kód