假设我的ClassA实例最终会出现在数据结构中,我们知道将在其上调用sorted()。这是别人的代码,它会调用sorted(),所以我不能指定一个排序函数,但我可以实现适合ClassA的任何方法。
在我看来
def __lt__(self, other):
就足够了,我不需要实现其他五种左右的方法(qt,eq,le,ge,ne)。
这还够吗?
答案 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()))