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í. Kdybys ale porovnal/a objekt třídy 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)

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

Je dobrým zvykem ověřit třídu objektů předaných metodě __eq__() a ujistit se, že porovnání dává smysl.

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

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

Zobrazit kurz

Pokyny k cvičení

  • Uprav definici třídy BankAccount tak, aby vracela True pouze tehdy, když je atribut number stejný a zároveň mají oba objekty předané metodě stejný type().
  • Zkontroluj, jestli jsou si acct a pn rovny.

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 class type
  def __eq__(self, other):
    return (self.number == other.number) ____

acct = BankAccount(873555333)
pn = Phone(873555333)

# Check if the two objects are equal
print(____)
Upravit a spustit kód