请问有谁可以找出这里发生了什么问题? 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;学生()
答案 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]