Минимальные методы для упорядочивания с помощью Duck Typing в Python 3.1

В инструкция говорит:

вообще, __lt__()и __eq__()достаточно, если вы хотите обычные значения операторов сравнения

Но я вижу ошибку :

>       assert 2 < three
E       TypeError: unorderable types: int() < IntVar()

, когда запускаю этот тест:

from unittest import TestCase

class IntVar(object):

    def __init__(self, value=None):
        if value is not None: value = int(value)
        self.value = value

    def __int__(self):
        return self.value

    def __lt__(self, other):
        return self.value < other

    def __eq__(self, other):
        return self.value == other

    def __hash__(self):
        return hash(self.value)

class DynamicTest(TestCase):

    def test_lt(self):
        three = IntVar(3)
        assert three < 4
        assert 2 < three
        assert 3 == three

Я удивлен, что когда IntVar()находится справа, __int__()не вызывается. Что я делаю неправильно?

Добавление __gt__()исправляет это, но означает, что я не понимаю, каковы минимальные требования для заказа...

Спасибо, Эндрю

5
задан andrew cooke 7 April 2012 в 13:35
поделиться