Курс 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"
- Условное добавление элементов в список
- Разделение строки в Python
- Освобождение памяти в Python
- Создание класса очереди
- Экранирование символов в Python
- Декораторы в Python
- Операторы объединения в Python 3.9
- Разбиение строки в Python
- Python reversed() функция
- Управление виртуальными средами в Python
- Списки в Python: основы
- Обработка исключений в Python
- Метод join() для объединения элементов строки
- Профилирование кода на Python
- Улучшенные подсказки для импорта в Python 3.12
- Подсчет часто встречающихся элементов
- *args и **kwargs в Python
- Избегайте использования goto
- Метод ior для битовых операций
- Справка по импортированным модулям
- Циклы в Python
- Работа с NumPy.linalg
- Объединение списков с использованием itertools.chain
- Работа со строками в Python
- Работа с пользовательским вводом
- Частичное совпадение ввода
- Тестирование модели в PyTorch
- Лямбда-функции в Python
- Итерация по копии коллекции
- Метод split() в Python
- Проблемы с dict в Python
- Применение функции к списку
- Красивый вывод списка
- Переменная Шредингера
- Преобразование символов с помощью map
- Работа с географическими данными в Python
- Перегрузка операторов в Python
- Python: Фильтрация списков с помощью filter()
- Замыкания в Python
- Python Метод sleep() времени
- Фильтрация входных данных в Python
- Изменение переменной в Python: nonlocal
- Лямбда-функции в Python
- Роль object и type в Python
- Руководство по использованию Colorama
- Сериализация и десериализация объектов
- Реверс строки в Python
- Кортежи в Python: особенности и преимущества















