我想将学生类的排序实例存储到学生类中。我在学生课堂上使用staticmethod进行排序。我可能是错的,但是设计似乎有点丑陋,并且想要避免使用静态方法(我心中最理想的方法是在Student类中使用返回学生ID的类方法,并使用此方法进行排序,但是似乎这不是在班级学生中为学生设置班级学生的班级方法的简便方法),如果有更好的设计,请与您分享,
class Student:
def __init__(self, id):
self.id = id
class Students:
def __init__(self, students):
self.sortedStudents = sorted(students, key=Students.getStudentID)
@staticmethod
def getStudentID(student):
return student.id
def dumpAllStudents(self):
for student in self.sortedStudents:
print student.id
students = []
students.append(Student(100))
students.append(Student(90))
students.append(Student(80))
allStudents = Students(students)
allStudents.dumpAllStudents()
提前致谢,
林
python大神给出的解决方案
使用operator.attrgetter
:
import operator
...
def __init__(self, students):
self.sortedStudents = sorted(students, key=operator.attrgetter('id'))
operator.attrgetter('id')
返回一个可调用对象,该可调用对象从操作数返回属性id
。因此,可以使用它代替静态方法或lambda
。