1. Learn
  2. /
  3. Courses
  4. /
  5. Python によるオブジェクト指向プログラミング

Connected

Exercise

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

前の演習では、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__() メソッドに渡されるオブジェクトのクラスを確認し、比較が妥当かどうかを確かめることは良い習慣です。

Instructions

100 XP

Phone と BankAccount の両クラスは定義済みです。まずは「コードを実行する」ボタンでそのまま実行し、出力を確認してください。

  • BankAccount の定義を修正し、number 属性が同じであることに加えて、渡された両オブジェクトの type() も同じ場合にのみ True を返すようにしてください。

もう一度コードを実行し、出力を確認しましょう。