Python 2.x имеет два способа перегрузить операторы сравнения: __cmp__ или "богатые операторы сравнения", такие как __lt__.  Говорят, что предпочтительными являются богатые сравнительные перегрузки, но почему это так?
Богатые операторы сравнения проще реализовать каждый, но вы должны реализовать несколько из них с почти одинаковой логикой. Однако, если вы можете использовать встроенный порядок cmp и кортеж, то __cmp__ становится довольно простым и выполняет все сравнения:
class A(object):
  def __init__(self, name, age, other):
    self.name = name
    self.age = age
    self.other = other
  def __cmp__(self, other):
    assert isinstance(other, A) # assumption for this example
    return cmp((self.name, self.age, self.other),
               (other.name, other.age, other.other))
Эта простота, похоже, удовлетворяет мои потребности намного лучше, чем перегрузка всех 6 (!) богатых сравнений. (Тем не менее, вы можете получить его до "просто" 4, если вы полагаетесь на "измененный аргумент" /отраженное поведение, но это приводит к чистому увеличению сложности, по моему скромному мнению.)
  Есть ли непредвиденные ошибки, о которых мне нужно знать, если я только перегружаю __cmp__?
Я понимаю, что операторы <, <=, == и т.д. могут быть перегружены для других целей и могут возвращать любой объект, который им нравится. Я не спрашиваю о достоинствах этого подхода, но только о различиях при использовании этих операторов для сравнений в том же смысле, что они означают для чисел.
Обновление: Как указано Christopher , cmp исчезает в 3.x.  Существуют ли какие-либо альтернативы, которые делают сравнение реализации так же просто, как выше __cmp__?
