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

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

У попередній вправі ви визначили клас 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

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

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

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

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

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

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