始める無料で始める

クラスの等価性を確認する

前の演習では、比較に使う number 属性を持つ BankAccount クラスを定義しました。しかし、同じく number 属性を持つ別のクラスのオブジェクトと BankAccount オブジェクトを比較すると、意図しない結果になることがあります。

たとえば、次の2つのクラスを考えてみましょう。


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 の定義を変更し、number 属性が同じであることに加えて、渡された2つのオブジェクトの type() も同じ場合にのみ True を返すようにしてください。
  • acctpn が等しいかどうかを確認してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

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(____)
コードを編集して実行