ПочатиПочніть безкоштовно

Перевірка рівності класів

У попередній вправі ви визначили клас BankAccount з атрибутом number, який використовувався для порівняння. Але якщо порівняти об'єкт BankAccount з об'єктом іншого класу, що також має атрибут number, можна отримати неочікувані результати.

Наприклад, розгляньте два класи


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)

Виконання acct == pn поверне True, хоча ми порівнюємо номер телефону з номером банківського рахунку.

Доброю практикою є перевірка класу об'єктів, переданих у метод __eq__(), щоб упевнитися, що порівняння має сенс.

Ця вправа є частиною курсу

Об'єктноорієнтоване програмування в Python

Переглянути курс

Інструкції до вправи

Класи Phone і BankAccount уже визначені. Спробуйте запустити код як є за допомогою кнопки "Run code" і перегляньте результат.

  • Змініть визначення BankAccount, щоб воно повертало True лише якщо атрибут number однаковий і type() обох переданих об'єктів однаковий.

Запустіть код і знову перегляньте результат.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

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)
Редагувати та запускати код