Курс 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. Ошибка NotImplemented в Python
  2. Управление виртуальными окружениями в Python
  3. Округление дробей в Python
  4. PrettyTable: создание таблицы
  5. Модуль os: работа с файлами и папками
  6. Функция __init__ в Python
  7. Отладка производительности Python
  8. Оператор walrus в Python
  9. Форматирование строк в Python
  10. Работа с комплексными числами
  11. Форматирование строк в Python.
  12. Курсы Яндекс Практикум
  13. Подписка на каналы разработчиков
  14. Создание тестовых данных с Faker
  15. Создание функций с произвольным количеством аргументов
  16. Подсчет элементов в Python
  17. Проверка вхождения подстроки
  18. Генераторы списков в Python
  19. Создание класса в Python
  20. Метод __float__ в Python
  21. Удаление ключа из словаря
  22. Преобразование чисел в слова
  23. Извлечение аудио из видео
  24. Создание новых функций с помощью functools.partial
  25. Асинхронное выполнение задач в Python
  26. Методы HTTP запросов в Flask
  27. Работа со строками в Python
  28. Обработка ошибок в Python
  29. Beautiful Soup — извлечение данных из HTML
  30. Автоматизация с Python
  31. Магические методы в Python
  32. Получение идентификатора объекта в памяти
  33. Разделение строки с регулярными выражениями
  34. Тестирование времени с Freezegun
  35. Атрибуты класса и экземпляра в Python
  36. Вычисление натурального логарифма в NumPy
  37. Принципы Zen Python
  38. Метод __iand__ для пользовательских классов
  39. Основы Python за 14 дней
  40. Метод join() для объединения элементов в строку.
  41. Работа с библиотекой xkcd
  42. Разработка Telegram-ботов
  43. Замена элементов в списке с помощью генераторов списков
  44. SciPy: широкий функционал для математических операций
  45. Ускорение выполнения кода в Python
  46. Работа с файлами в Python

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

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