クラスの等価性を確認する
前の演習では、比較に使う number 属性を持つ BankAccount クラスを定義しました。しかし、同じく number 属性を持つ別のクラスのオブジェクトと BankAccount オブジェクトを比較すると、意図しない結果になることがあります。
たとえば、次の2つのクラスを考えてみましょう。
|
|
acct == pn を実行すると、電話番号と銀行口座番号の比較にもかかわらず True が返ります。
比較が妥当であることを確認するために、__eq__() メソッドに渡されるオブジェクトのクラスをチェックするのがよい実践です。
この演習はコースの一部です
Pythonによるオブジェクト指向プログラミング入門
演習の手順
BankAccountの定義を変更し、number属性が同じであることに加えて、渡された2つのオブジェクトのtype()も同じ場合にのみTrueを返すようにしてください。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(____)