同じクラスの異なるインスタンスの変数を比較したい


概要


クラス内で

__eq__

という関数を作り、引数を設定すると
異なるインスタンスのその引数を比較できる


class aClass():
    def __init__(self,name):
        self.name = name

    def __eq__(self,name2):
        return self.name == name2

ob01 = aClass('Bob')
ob02 = aClass('Mike')
print(ob01 == ob02)

ob02 = aClass('Bob')
print(ob01 == ob02)

aCalssというクラスを以下に定義
    コンストラクタを以下に定義する(引数name)
        self.nameにname(引数のname)を入れる

    __eq__関数を以下に定義(引数はname2)
    self.nameとname2を比較して関数の戻り値にする

ob01をクラスaClassのインスタンスとする、引数はBob
ob02をクラスaClassのインスタンスとする、引数はMike
ob01とob02の戻り値が等しいか比較:Flase

ob02をクラスaClassのインスタンスとする、引数はBob
ob01とob02の戻り値が等しいか比較:True

出力


False
True

説明


__eq__でなく、自分で勝手に作った名前の関数を入れて同じことをやると結果が間違う
しかし覚えるのが面倒なら、異なるインスタンスの値を普通に出して比較してもいい
ob01 = aClass('Bob')
ob02 = aClass('Mike')
print(ob01.name == ob02.name)
こんな書き方もある、というくらいもの

間違えやすい問題