Курс 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. Метод enumerate() в Python
  2. Перевернуть список в Python
  3. Фильтрация списка от «ложных» значений
  4. Блок else в циклах Python
  5. Метод repr() в Python
  6. Установка переменной среды в Python
  7. Сортировка с параметром key
  8. Эффективная конкатенация строк с использованием join()
  9. Функция enumerate() в Python
  10. Работа с контекстным менеджером Pool
  11. Принципы SRP и OCP
  12. Декораторы с аргументами
  13. Mad Libs Generator
  14. Отправка POST запроса на сервер.
  15. Множественные конструкторы в Python
  16. Парсинг веб-страниц с Beautiful Soup
  17. Работа с массивами в Python
  18. Область видимости переменных
  19. Перевод текста с Python Translator
  20. Вывод баннеров
  21. Работа с итераторами через срезы
  22. Метод join() с набором
  23. Преобразование списков в словарь
  24. Проверка индексов коллекции
  25. Иерархия классов в Python
  26. Сравнение объектов в Python
  27. Логирование с Loguru
  28. Игра «Угадывание чисел»
  29. Работа с *args и **kwargs в Python
  30. Распаковка аргументов в Python
  31. Хеширование паролей с солью
  32. Избегайте ошибку FileNotFoundError
  33. Оператор «not» в Python
  34. Функция enumerate() в Python
  35. Управление импортом в Python
  36. Освоение Python
  37. Работа с itertools
  38. Мощь вложенных функций в Python
  39. Метод __iand__ для пользовательских классов
  40. Работа с CSV в Python
  41. Оптимизация гиперпараметров с Scikit Optimize
  42. Запуск внешнего кода в Jupyter
  43. Преобразование Word в PDF с Spire.Doc
  44. Оператор assert в Python
  45. Условные выражения в Python
  46. Метод Self в Python
  47. Работа со строками в Python.
  48. Переопределение унарных операторов
  49. Функции с необязательными аргументами

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

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