En python, on peut dire:quelles sont les méthodes utilisées par `foo <bar <baz`?
if foo < bar < baz:
do something.
et de même, nous pouvons surcharger les opérateurs de comparaison comme:
class Bar:
def __lt__(self, other):
do something else
mais les méthodes des types des opérandes de ces comparisions d'intervalle sont effectivement appelés? est l'équivalent ci-dessus à
if foo.__lt__(bar) and bar.__lt__(baz):
do something.
Éditer: re S.Lott, Voici une sortie qui aide à illustrer ce qui se passe réellement.
>>> class Bar:
def __init__(self, name):
self.name = name
print('__init__', self.name)
def __lt__(self, other):
print('__lt__', self.name, other.name)
return self.name < other.name
>>> Bar('a') < Bar('b') < Bar('c')
('__init__', 'a')
('__init__', 'b')
('__lt__', 'a', 'b')
('__init__', 'c')
('__lt__', 'b', 'c')
True
>>> Bar('b') < Bar('a') < Bar('c')
('__init__', 'b')
('__init__', 'a')
('__lt__', 'b', 'a')
False
>>>
+1: Vous pourriez (et fait) répondre à votre propre question. -1: Vous n'avez certainement pas besoin de poser cette question ici, car trouver la réponse était clairement plus facile et plus rapide que de demander. –