Сообщить об ошибке.

Декоратор @total_ordering модуля functools в Python

Создать недостающие методы сравнения

Синтаксис:

from functools import total_ordering

@total_ordering
class MyObject:
    ...
    ...

Параметры:

  • Нет.

Возвращаемое значение:

Описание:

Декоратор класса @total_ordering модуля functools оборачивает класс, который определяет один или несколько методов сравнения и добавляет остальные методы сравнения. Такое поведение декоратора упрощает усилия по определению всех возможных операций расширенного сравнения.

Класс должен определять один из методов __lt__(), __le__(), __gt__() или __ge__(). Кроме того, класс должен предоставлять метод __eq__().

Примечание.
Хотя этот декоратор позволяет создавать хорошо управляемые и полностью упорядоченные типы, это происходит за счет более медленного выполнения и более сложных трассировок стека для производных методов сравнения. Если анализ производительности показывает, что это является узким местом для данного приложения, реализация всех шести методов сравнения обеспечит повышение скорости.

Примеры использования:

from functools import total_ordering

@total_ordering
class Student:
    def _is_valid_operand(self, other):
        return (hasattr(other, "lastname") and
                hasattr(other, "firstname"))

    def __eq__(self, other):
        if not self._is_valid_operand(other):
            return NotImplemented
        return ((self.lastname.lower(), self.firstname.lower()) ==
                (other.lastname.lower(), other.firstname.lower()))

    def __lt__(self, other):
        if not self._is_valid_operand(other):
            return NotImplemented
        return ((self.lastname.lower(), self.firstname.lower()) <
                (other.lastname.lower(), other.firstname.lower()))