覆盖__cmp__ python不起作用

时间:2017-12-04 03:02:05

标签: python

请问有谁可以找出这里发生了什么问题? cmp 未被调用。 sorted(list,key = ...)或类似的工作正常。但是,这也不会覆盖 cmp 方法。

我的目标是按多个键排序。我也有构图关系。学生可以拥有另一个自定义对象的列表,依此类推。什么是最好的方法?我想在功能方面做一些像compareTo或比较或Comparator(Stream API)的Java。可能存在默认排序。

win32上的Python 3.6.1(v3.6.1:69c0db5,2017年3月21日,17:54:52)[MSC v.1900 32位(英特尔)] 输入“帮助”,“版权”,“信用”或“许可”以获取更多信息。

class Student(object):
    def __init__(self, name, mark):
         self.name = name
         self.mark = mark

    def __cmp__(self, other):
        if self.name < other.name:
           return -1
        elif self.name > other.name:
           return 1
        else:
           return 0
        #return self.name.__cmp__(other.name)

student_list = [
Student(name="cccc", mark=10),
Student(name="aaaa", mark=5),
Student(name="dddd", mark=7)
]

student_list = sorted(student_list)

TypeError:unorderable类型:Student()&lt;学生()

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

Python 3 __cmp__ is deprecated。对于排序,请改为使用__lt__

class Student(object):
    def __init__(self, name, mark):
         self.name = name
         self.mark = mark

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

    def __repr__(self):
        return self.name

student_list = [
Student(name="cccc", mark=10),
Student(name="aaaa", mark=5),
Student(name="dddd", mark=7)
]

print(sorted(student_list)) # [aaaa, cccc, dddd]