En général, cela peut vouloir dire n'importe quoi . Il était déjà expliqué ce qu'il signifie que si x
est un list
ou numpy.ndarray
mais en général , il ne dépend que de la façon dont les opérateurs de comparaison ( <
, >
...) et aussi comment le get / set-point ( [...]
-syntax) sont mis en œuvre.
x.__getitem__(x.__lt__(2))
x.__setitem__(x.__lt__(2), 0)
Car:
x < value
est équivalent à x.__lt__(value)
x[value]
équivaut (à peu près) à x.__getitem__(value)
x[value] = othervalue
est (également à peu près) équivalent à x.__setitem__(value, othervalue)
.
Cela peut être personnalisé pour faire tout ce que vous voulez. Juste à titre d'exemple (imite un peu l'indexation numpys-booléenne):
class Test:
def __init__(self, value):
self.value = value
def __lt__(self, other):
res = [item < other for item in self.value]
return self.__class__(res)
def __repr__(self):
return '{0} ({1})'.format(self.__class__.__name__, self.value)
def __getitem__(self, item):
if isinstance(item, Test):
res = self.__class__([i for i, index in zip(self.value, item) if index])
return res
return self.value[item]
def __setitem__(self, item, value):
if isinstance(item, Test):
self.value = [i if not index else value for i, index in zip(self.value, item)]
else:
self.value[item] = value
Voyons maintenant ce qui se passe si vous l'utilisez:
>>> a = Test([1,2,3])
>>> a
Test ([1, 2, 3])
>>> a < 2
Test ([True, False, False])
>>> a[Test([True, False, False])]
Test ([1])
>>> a[a < 2]
Test ([1])
>>> a[a < 2] = 0
>>> a
Test ([0, 2, 3])
Notez que ce n'est qu'une possibilité. Vous êtes libre de mettre en œuvre presque tout ce que vous voulez.