В отличие от встроенных типов, таких как list
, массивы numpy
используют преимущества системы сравнения Python, переопределяя операторы сравнения. Это сделано для того, чтобы разрешить сравнение с атомарными типами, типами, похожими на массивы, и т. Д. Операторы расширенного сравнения возвращают новые массивы (а не просто True
или False
).
Любой может написать класс, который делает пользовательские сравнения , как numpy
массивы.
Полезный совет: если вы используете functools.total_ordering
, вам нужно только предоставить два метода , например, __eq__
и __lt__
:
import functools
@functools.total_ordering
class Mine:
def __eq__(self, other):
...
def __lt__(self, other):
...
Остальные методы автоматически становятся интуитивно понятными, когда вы предоставляете правильное поведение для этих двух. Однако на практике, чтобы заставить класс работать так, как вы хотите, часто можно обнаружить, что необходимо настроить поведение других богатых методов сравнения: __ne__
, __gt__
, __le__
и __ge__
.