Pythonの__eq__メソッドでインスタンス変数を比較する

スポンサーリンク

Pythonの__eq__メソッドでインスタンス変数を比較してみます。

■Python

Google Colaboratory(Google Colab),2023年3月18日時点ではPython 3.9.16が用いられる。

■__eq__メソッドでインスタンス変数を比較する

では、早速__eq__メソッドでインスタンス変数を比較するコードを書いていきます。

■コード

class Fruit:
    def __init__(self, name, color):
        self.name = name
        self.color = color
    
    def __eq__(self, other):
        if isinstance(other, Fruit):
            return self.name == other.name and self.color == other.color
        else:
            return False
            
apple = Fruit("apple", "red")
orange = Fruit("orange", "orange")
if apple == orange:
    print("同じ果物です")
else:
    print("違う果物です")

Fruitというオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義します。定義後、クラス内にdef文を用いて’__init__’と記述し、コンストラクタを使います。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。次に第2,第3の引数,パラメータとして「name, color」をそれぞれ設定します。なお、最初の「self(自己)」という引数,パラメータを介して、「name, color」という2つのクラスのインスタンス変数が初期化されます。この時にself(自己)に対してドット演算子( . )を用いてname, colorの2つを指定します。

次にクラス内にdef文を用いて’__eq__’と記述し、特殊なメソッドを使います。これはselfとotherの値が等しいかを比較することができます。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。次に第2の引数,パラメータとして「other」を設定します。なお、「other」は比較対象となるオブジェクトのインスタンス自体(クラスから生成された実際のデータ)を表している。

次に’__eq__’メソッド内にif文を用いてisinstance()を使うようにします。このメソッドは、オブジェクトのデータ型を判定するものです。括弧内には、第1の引数,パラメータとして「other」を設定します。第2の引数,パラメータとして「Fruit」を設定します。そして、このメソッドが呼び出されたときの処理として、2つのインタンス変数であるself.name、self.ageに割り当てた値が、other.x、other.yに割り当てた値(クラスから生成された実際のデータで、データには属性を持ちその値)と等しいかを等価演算子”==”を用いた処理を行います。もし異なる場合はelse節でreturnとしてFalseを返します。

メソッドを定義後、apple,orangeという変数を用意し、その中にそれぞれFruit()を格納し、インスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内にアクセスできるようになりました。そこで、先ほどの2つの引数,パラメータであるname,colorに値を渡すために、括弧内に値をそれぞれ記述します。これで’__init__’内でself.name、self.colorに値が割り当てられます。

最後にifとelseを使って作成した2つのapple,orangeというオブジェクトを、等価演算子”==”を使用し比較します。今回の場合では、appleとorangeは異なるオブジェクトであるため、Falseが返されます。

■実行・検証

このコード(セル)を保存し、Google Colaboratory上で、セルを実行してみます。

実行してみると、クラスを定義しクラス内にインスタンス変数を作り、作ったインタンス変数を’__eq__’メソッドを用いて比較し、最後にifとelseを用いて作成した2つのオブジェクトを、等価演算子”==”を使用し比較。比較後、比較された結果を出力させることができました。

コメント

タイトルとURLをコピーしました