我有这个:
class Student:
def __init__(self, FirstName, LastName):
self.FirstName = FirstName
self.LastName = LastName
def __iter__(self):
return self
Students = [
# FirstName LastName
Student("Mary", "Smith"),
Student("Joe", "Jones"),
Student("Jane", "Doe" )]
我Student
上课。然后我列出了 3 个Student
对象。然后我可以打印这样的名称列表:
for item in Students:
print item.FirstName, item.LastName
它乖乖地输出了这个:
Mary Smith
Joe Jones
Jane Doe
然后我用谷歌搜索了如何按属性对对象列表进行排序,发现:
Students.sort(key = lambda x: x.LastName)
它有效。该行按LastName
属性对列表进行排序,我可以以与上面相同的方式打印它,并且名称按以下顺序排列LastName
:
Jane Doe
Joe Jones
Mary Smith
但我想要发生的是用户输入要排序的列表(sortlist
)和排序的属性(sortby
)。所以我尝试了:
def sort(sortlist, sortby):
sortlist.sort(key = lambda x: x.sortby)
sort(Students, FirstName)
那是行不通的。首先它说:
NameError: "name 'FirstName' is not defined"
这是它自己的问题......我如何告诉它这FirstName
是我希望它排序的列表的一个属性?
然后我做FirstName
了一个字符串来试试……</p>
AttributeError: "Student instance has no attribute 'sortby'"
我知道没有属性sortby
,这应该是一个参数......但它不能使用这样的参数?为什么不?我怎样才能让它做到这一点?