等価演算のオーバーロード
カスタムクラスの2つのオブジェクトを == で比較すると、Python はデフォルトでオブジェクトが指すメモリ領域だけを比較し、オブジェクト内のデータは比較しません。この挙動を上書きするには、比較する2つのオブジェクトを引数に取り、True か False を返す特別なメソッドをクラスに実装します。2つのオブジェクトが比較されると、このメソッドが暗黙的に呼び出されます。
前の章で使った BankAccount クラスが script.py に用意されています。balance と number の2つの属性と、withdraw() メソッドを持ちます。残高が同じでも、必ずしも同じ口座とは限りませんが、銀行口座には通常「口座番号」があり、口座番号が同じであれば同じ口座と見なすべきです。
この演習はコースの一部です
Pythonによるオブジェクト指向プログラミング入門
演習の手順
__init__()メソッドを修正して、numberという新しい引数を受け取り、新しいnumber属性を初期化してください。- 2つのオブジェクトの
number属性が等しいかを比較するメソッドを定義してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
class BankAccount:
# Modify to initialize a number attribute
def __init__(self, ____, balance=0):
self.balance = balance
____
def withdraw(self, amount):
self.balance -= amount
# Define __eq__ that returns True if the number attributes are equal
def ____(____, ____):
return ____.number == ____.____
# Create accounts and compare them
acct1 = BankAccount(123, 1000)
acct2 = BankAccount(123, 1000)
acct3 = BankAccount(456, 1000)
print(acct1 == acct2)
print(acct1 == acct3)