Python 3.7+dataclassesфункция
@dataclass(order=True)
базовый
order=True добавляет методы __lt__, __le__, __gt__, __ge__ на основе кортежа полей.
Синтаксис
@dataclass(order=True)
class X:
a: int; b: int
Сравнение идёт по всем полям в порядке объявления, как по кортежу, — выбрать ключ на лету нельзя, поэтому порядок полей в классе фактически задаёт порядок сортировки; лишние поля исключаются через field(compare=False). Сочетание order=True с eq=False запрещено и падает с ValueError. Сравнение с объектом другого класса возвращает NotImplemented, то есть на выходе получается TypeError, а не False.
Примеры
from dataclasses import dataclass
@dataclass(order=True)
class Version:
major: int
minor: int
v1 = Version(1, 0)
v2 = Version(2, 0)
v1 < v2 # → True
sorted([Version(2,0), Version(1,5)]) # → [Version(1,5), Version(2,0)]
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности