无法实现__lt __(小于)方法来对类对象列表进行排序

时间:2017-09-06 18:33:01

标签: python-3.x

我正在尝试使用_lt__方法来比较类对象并进行相应的排序。但是到目前为止还没能做到

class Test:

    def __init__(self,x):
        self.x = x

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

t1 = Test(10)
t2 = Test(12)
lis = [t1,t2]
lis.sort()
print(lis)

我的输出为

[<__main__.Test object at 0x7fd4c592fb70>, <__main__.Test object at 0x7fd4c592fb38>]

我想也许我需要给对象一个字符串表示。所以我做了

def __str__(self):
    return "{}".format(self.x)

我仍然得到相同的输出

[<__main__.Test object at 0x7f212594bac8>, <__main__.Test object at 0x7f212594bc50>]

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你正在做几乎所有事情;事情只是列表中的对象由__repr__而不是__str__表示:

class Test:

    def __init__(self,x):
        self.x = x

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

    def __repr__(self):
        return "{}".format(self.x)

t1 = Test(10)
t2 = Test(12)
lis = [t1,t2]
lis.sort()
print(lis)  # [10, 12]