Pythonのクラスを定義し等価演算子を使用し比較する

スポンサーリンク

Pythonのクラスを定義し等価演算子を使用し比較してみます。

■Python

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

■Pythonのクラスを定義し等価演算子を使用し比較する

では、早速Pythonのクラスを定義し等価演算子を使用し比較するコードを書いていきます。

■コード

class Point:
  def __init__(self, x, y):
    self.x = x
    self.y = y
  
  def __eq__(self, other):
    if isinstance(other, Point):
        return self.x == other.x and self.y == other.y
    return False

p1 = Point(1, 2)
p2 = Point(3, 4)

if p1 == p2:
    print("p1とp2は同じ点です。")
else:
    print("p1とp2は異なる点です。")

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

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

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

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

最後にifとelseを使って作成した2つのPointというオブジェクトを、等価演算子”==”を使用して比較しています。今回の場合では、p1とp2のxとyの値は異なるため、等価演算子はFalseが返され、else内の処理が実行されます。

■実行・検証

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

実行してみると、Pythonのクラスを定義し、オブジェクトを作成。作成後、オブジェクトを等価演算子”==”を用いて比較し、比較した結果を出力させることができました。

コメント

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