Курс 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. Методы split() и join() — Python строк.
  2. Оптимизация памяти с slots
  3. Виртуальное окружение Python
  4. Автоматизация с Python
  5. Перетасовка списков в Python
  6. Улучшенные подсказки для импорта в Python 3.12
  7. Добавление вложенных списков
  8. Python reversed() vs срез[::-1]
  9. Библиотека sh: использование команд bash в Python
  10. Генерация случайных чисел в Python
  11. Метод rpow в Python
  12. Модуль math: константы π и e
  13. Преобразование чисел в слова
  14. Установка и использование TensorFlow
  15. Работа с атрибутом dict
  16. Использование html-скриптов в Jupyter Notebook
  17. Работа с геоданными с помощью geopy
  18. Numpy: использование Ellipsis
  19. Цикл for в Python
  20. Печать календаря в Python
  21. Определение наиболее частого элемента с помощью collections.Counter
  22. Вычисление фазы комплексного числа
  23. Распаковка аргументов в Python
  24. Декораторы в Python
  25. Генерация случайных чисел в Python
  26. ROT13 Шифр Цезаря в Python
  27. Работа с библиотекой requests
  28. Обработка исключений в Python
  29. Метод difference_update() — разность множеств
  30. Метод __float__ в Python
  31. Работа с WindowsPath()
  32. Методы Python для работы с данными
  33. Объединение итераторов
  34. Уникальные значения из списка
  35. Декоратор total_ordering для класса Point
  36. Переопределение метода xor в Python
  37. Работа с файлами в Python
  38. Операторы += в Python
  39. Установка и использование Logzero
  40. Закрытие файла в Python
  41. Принципы программирования
  42. Проблемы с именами переменных
  43. Оператор объединения словарей
  44. Модуль Operator в Python
  45. Создание вложенного генератора

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

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