Python Glossary English

все Python 3functoolsпонятие

functools.total_ordering

сравнение

Декоратор класса. Дополняет недостающие операторы сравнения (<, <=, >, >=) при наличии __eq__ и хотя бы одного из них.

Синтаксис

@functools.total_ordering

Как только вы объявили __eq__, класс теряет унаследованный __hash__ и экземпляры перестают быть хешируемыми — total_ordering это не чинит, __hash__ придётся вернуть вручную. Сгенерированные операторы просто дёргают ваши __eq__ и __lt__, поэтому работают медленнее написанных руками и удлиняют трейсбек; на горячем пути дешевле расписать все шесть. И пусть ваш __lt__ возвращает NotImplemented для чужих типов, иначе сравнение с посторонним объектом упадёт с AttributeError вместо внятного TypeError.

Примеры

from functools import total_ordering
@total_ordering
class Version:
    def __init__(self, v): self.v = v
    def __eq__(self, o): return self.v == o.v
    def __lt__(self, o): return self.v < o.v
v1, v2 = Version(1), Version(2)
print(v1 < v2)  # → True
print(v1 > v2)  # → False
print(v1 <= v1)  # → True
print(v2 >= v1)  # → True

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности