Курс 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"
- Методы split() и join() — Python строк.
- Оптимизация памяти с slots
- Виртуальное окружение Python
- Автоматизация с Python
- Перетасовка списков в Python
- Улучшенные подсказки для импорта в Python 3.12
- Добавление вложенных списков
- Python reversed() vs срез[::-1]
- Библиотека sh: использование команд bash в Python
- Генерация случайных чисел в Python
- Метод rpow в Python
- Модуль math: константы π и e
- Преобразование чисел в слова
- Установка и использование TensorFlow
- Работа с атрибутом dict
- Использование html-скриптов в Jupyter Notebook
- Работа с геоданными с помощью geopy
- Numpy: использование Ellipsis
- Цикл for в Python
- Печать календаря в Python
- Определение наиболее частого элемента с помощью collections.Counter
- Вычисление фазы комплексного числа
- Распаковка аргументов в Python
- Декораторы в Python
- Генерация случайных чисел в Python
- ROT13 Шифр Цезаря в Python
- Работа с библиотекой requests
- Обработка исключений в Python
- Метод difference_update() — разность множеств
- Метод __float__ в Python
- Работа с WindowsPath()
- Методы Python для работы с данными
- Объединение итераторов
- Уникальные значения из списка
- Декоратор total_ordering для класса Point
- Переопределение метода xor в Python
- Работа с файлами в Python
- Операторы += в Python
- Установка и использование Logzero
- Закрытие файла в Python
- Принципы программирования
- Проблемы с именами переменных
- Оператор объединения словарей
- Модуль Operator в Python
- Создание вложенного генератора















