演算子のオーバーロード:比較

Python によるオブジェクト指向プログラミング

Alex Yarosh

Content Quality Analyst @ DataCamp

オブジェクトの等価性

class Customer:
  def __init__(self, name, balance):
    self.name, self.balance = name, balance  


customer1 = Customer("Maryam Azar", 3000)
customer2 = Customer("Maryam Azar", 3000)

customer1 == customer2
False
Python によるオブジェクト指向プログラミング

オブジェクトの等価性

class Customer:
  def __init__(self, name, balance, id):
    self.name, self.balance = name, balance
    self.id = id    

customer1 = Customer("Maryam Azar", 3000, 123)
customer2 = Customer("Maryam Azar", 3000, 123)
customer1 == customer2
False
Python によるオブジェクト指向プログラミング

変数は参照である

customer1 = Customer("Maryam Azar", 3000, 123)
customer2 = Customer("Maryam Azar", 3000, 123)
print(customer1)
<__main__.Customer at 0x1f8598e2e48>
print(customer2)
<__main__.Customer at 0x1f8598e2240>
Python によるオブジェクト指向プログラミング

カスタム比較

import numpy as np

# 同じデータを含む異なる配列
array1 = np.array([1,2,3])
array2 = np.array([1,2,3])

array1 == array2
True
Python によるオブジェクト指向プログラミング

__eq__() のオーバーロード

class Customer:
  def __init__(self, id, name):
    self.id, self.name = id, name

# == 使用時に呼ばれる def __eq__(self, other):
# 診断用の出力 print("__eq__() is called") # すべての属性が一致すれば True return (self.id == other.id) and \ (self.name == other.name)

 

 

  • == で同クラスの2オブジェクトを比較すると __eq__() が呼ばれる
  • 引数は selfother(比較対象)
  • 真偽値を返す
Python によるオブジェクト指向プログラミング

オブジェクトの比較

# 等しい2つのオブジェクト

customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(123, "Maryam Azar")

customer1 == customer2
__eq__() is called
True
# 等しくない2つのオブジェクト(id が異なる)

customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(456, "Maryam Azar")

customer1 == customer2
__eq__() is called
False
Python によるオブジェクト指向プログラミング

その他の比較演算子

演算子 メソッド
== __eq__()
!= __ne__()
>= __ge__()
<= __le__()
> __gt__()
< __lt__()
  • __hash__():オブジェクトを辞書キーや集合で使う
Python によるオブジェクト指向プログラミング

Passons à la pratique !

Python によるオブジェクト指向プログラミング

Preparing Video For Download...