为要排序的类实现__lt__是否安全?

时间:2012-01-10 00:00:11

标签: python sorting

假设我的ClassA实例最终会出现在数据结构中,我们知道将在其上调用sorted()。这是别人的代码,它会调用sorted(),所以我不能指定一个排序函数,但我可以实现适合ClassA的任何方法。

在我看来

def __lt__(self, other):

就足够了,我不需要实现其他五种左右的方法(qt,eq,le,ge,ne)。

这还够吗?

1 个答案:

答案 0 :(得分:33)

PEP 8建议不要这样做。我也建议反对它,因为它是一种脆弱的编程风格(对于次要代码修改不健壮):

相反,请考虑使用functools.total_ordering类装饰器来完成工作:

@total_ordering
class Student:
    def __eq__(self, other):
        return ((self.lastname.lower(), self.firstname.lower()) ==
                (other.lastname.lower(), other.firstname.lower()))
    def __lt__(self, other):
        return ((self.lastname.lower(), self.firstname.lower()) <
                (other.lastname.lower(), other.firstname.lower()))