Курс Python → Декоратор total_ordering для сравнения объектов

Для упрощения использования операторов сравнения в Python можно воспользоваться декоратором functools.total_ordering. Этот декоратор позволяет автоматически создать все операторы сравнения (__eq__, __ne__, __lt__, __le__, __gt__, __ge__>) на основе реализации лишь двух из них.

Например, если у вас есть класс Point с атрибутами x и y, и вы хотите сравнивать объекты этого класса, то достаточно реализовать методы __eq__ и __lt__>. Затем применить декоратор @functools.total_ordering к классу, чтобы автоматически получить остальные методы сравнения.


from functools import total_ordering

@total_ordering
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

    def __lt__(self, other):
        return self.x < other.x or (self.x == other.x and self.y < other.y)

Теперь объекты класса Point могут быть сравниваемыми с помощью всех операторов сравнения. Например:


p1 = Point(1, 2)
p2 = Point(3, 4)

print(p1 == p2) # False
print(p1 != p2) # True
print(p1 < p2) # True
print(p1  p2) # False
print(p1 >= p2) # False

Таким образом, использование декоратора functools.total_ordering позволяет существенно упростить работу с операторами сравнения в Python, делая код более читаемым и компактным.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Создание итерируемых объектов
  2. Вычисление натурального логарифма в NumPy
  3. Исключение NotImplementedError
  4. Раздувающийся словарь в Python
  5. Определение функций с необязательными аргументами
  6. Счетчик ссылок в Python
  7. Поиск индекса элемента
  8. Python defaultdict добавление ключа
  9. Многострочные комментарии в Python
  10. Функция enumerate в Python
  11. Метод add для класса Vector
  12. Синтаксис переменных цикла в Python
  13. Глобальные переменные в Python
  14. Функции range() в Python
  15. Именование столбцов в Python с pandas
  16. Логические операторы в Python
  17. Использование модуля math
  18. Уникальность ключей в словаре
  19. lru_cache оптимизация функций
  20. Изменение IP-адреса в Python
  21. Python Ellipsis использование
  22. Импорт объектов из модулей
  23. Моржовый оператор в Python 3.8
  24. Порядок и длина множеств в Python
  25. TON Smart Challenge #2: участие и подготовка
  26. Применение команды break
  27. Создание инструмента обнаружения плагиата
  28. Срезы в Python
  29. Очистка строки в Python
  30. Enum в Python: создание и использование перечислений
  31. Создание директории в Python
  32. Срез в Python
  33. Перебор элементов списка в Python
  34. Очистка вывода в Python
  35. Подчеркивание в REPL
  36. Работа с парами ключ-значение
  37. Оптимизация памяти с __slots__
  38. Скрытие вывода данных
  39. Динамическая типизация в Python
  40. Создание списков в Python
  41. Функция product() в Python
  42. Python Метод Union Множеств
  43. Функции all и any в Python
  44. Приоритет операций в Python
  45. Создание списков в Python
  46. Работа с очередями в Python

Marketello читают маркетологи из крутых компаний

Marketello.org — площадка для начинающих интернет-маркетологов, которая поможет прокачать твои навыки.
Много практики, в меру теории. Уникальный подход к обучению.
Присоединяйся!
Для авторов и партнёров
Facebook: https://fb.com/dmitriy.komarovskiy
© 2017-2025, Все права защищены.