python __it__と__gt__の使い分けについて
classの特殊メソッド lt と gt の使い分けについて、それぞれが>演算子と<演算子の役割を示し、インスタンスの比較ができるようになることは理解したのですが、それぞれの使い分けについて理解ができません。
__gt__を使った比較演算
python
1class Comparison: 2 def __init__(self,x): 3 self.x = x 4 5 def __gt__(self,other): 6 if self.x < other.x: 7 return True 8 elif self.x == other.x: 9 return None 10 else: 11 return False 12 13y1 = Comparison(22) 14y2 = Comparison(21) 15 16print(y1 > y2) 17#>>False
疑問
__gt__でself.xとother.xを比較し、結果を「True , False , None」で返すようにしていますが、比較演算子”>”の向きを変えれば逆の結果が帰って来ますし、例外も発生しないため__lt__とどのように使い分けるのか疑問を持っています。
また私が今勉強に使っている参考書では、同じclass内に__gt__と__lt__を同時に定義しており、中身は">"の向きを変えただけの全く同じものだったので、両方定義する理由があるのであれば知りたいと思い質問させていただきました。
下記に記載させていただきます。
疑問に持った参考書内のコード抜粋
python
1 def __init__(self, v, s): 2 """suit + value are ints""" 3 self.value = v 4 self.suit = s 5 6 def __lt__(self, c2): 7 if self.value < c2.value: 8 return True 9 if self.value == c2.value: 10 if self.suit < c2.suit: 11 return True 12 else: 13 return False 14 return False 15 16 def __gt__(self, c2): 17 if self.value > c2.value: 18 return True 19 if self.value == c2.value: 20 if self.suit > c2.suit: 21 return True 22 else: 23 return False 24 return False 25 26#__lt__と__gt__が全く同じ役割を示しているように 27#見えるため、同時に定義する理由が不明です。 28 29 def __repr__(self): 30 v = self.values[self.value] +\ 31 " of " + \ 32 self.suits[self.suit] 33 return v
本文で書式がついて困る時は `__gt__`とバッククォートでくくるとよいですよ。
https://teratail.com/help#about-markdown
