Pythonの__eq__メソッドを用いる理由

スポンサーリンク

Pythonの__eq__メソッドを用いる理由について解説します。

■Python

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

■クラスを定義し2つのインスタンスを作成する

まずクラスを定義し2つのインスタンスを作成しますので、コードを書きます。

■コード

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

tanaka = Person('テスト太郎', '田中', 30)
suzuki = Person('テスト太郎', '鈴木', 30)

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

次に、tanaka,suzukiという変数を用意し、その中にそれぞれPerson()を格納し、インスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内にアクセスできるようになりました。そこで、先ほどの3つの引数,パラメータであるfirst_name, last_name、ageに値を渡すために、括弧内に値をそれぞれ記述します。これで’__init__’内でself.first_name、self.last_name、self.ageに値が割り当てられます。

■is演算子を用いて2つのオブジェクトが同一であるかを確認する

2つのオブジェクトが作成されましたので、この2つのオブジェクトが同一であるかを調べてみます。

■実行・検証

検証のために、is演算子を用いて今回の2つのオブジェクト名を記述し、print()で同一であるかの判定を行った結果を出力します。出力すると、「False(偽)」と出力されました。これで2つのオブジェクトは同一ではないことが確認できました。

■等価演算子”==”を用いて2つのオブジェクトの値が等しいかどうかを確認する

では、次に等価演算子”==”を用いて2つのオブジェクトの値が等しいかどうかを確認してみます。

■実行・検証

検証のために、等価演算子”==”を用いて今回の2つのオブジェクト名を記述し、print()で等しいかどうかの判定を行った結果を出力します。出力すると、「False(偽)」と出力されました。これで2つのオブジェクトの値が等しくはないということが確認できました。

■今回行った結果からわかること

今回クラスを定義し、2つのオブジェクトを作成しましたが、オブジェクトの作成を行う前に、Person()の括弧内の引数,パラメータにそれぞれ値を渡しました。この時に渡したage(年齢)の値は同じですが、等価演算子”==”を用いて検証しても、オブジェクトの値が等しくはないという判定となりました。

しかし、2つのオブジェクト(tanakaとsuzuki)で等しくなるようにしたいということが発生した場合はどうなるのでしょうか。このような時に、_eq__メソッドを用いることで、age(年齢)が同じで2つのオブジェクト(tanakaとsuzuki)が等しくなるようにすることができます。

コメント

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