クラスの等価性を確認する
前の演習では、number 属性を比較に使う BankAccount クラスを定義しました。しかし、もし別のクラスにも number 属性があり、それと BankAccount オブジェクトを比較すると、思わぬ結果になることがあります。
たとえば、次の2つのクラスを考えます。
|
|
acct == pn を実行すると、電話番号と銀行口座番号を比較しているにもかかわらず、True が返ります。
__eq__() メソッドに渡されるオブジェクトのクラスを確認し、比較が妥当かどうかを確かめることは良い習慣です。
この演習はコースの一部です
Python によるオブジェクト指向プログラミング
演習の手順
Phone と BankAccount の両クラスは定義済みです。まずは「コードを実行する」ボタンでそのまま実行し、出力を確認してください。
BankAccountの定義を修正し、number属性が同じであることに加えて、渡された両オブジェクトのtype()も同じ場合にのみTrueを返すようにしてください。
もう一度コードを実行し、出力を確認しましょう。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
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)