天天看点

Python轻松入门-37 自定义对象排序

视频教程下载链接:​​http://pan.baidu.com/s/1c1YHrdI​​​

配套教程下载:​​​http://pan.baidu.com/s/1qYdI6q4​​

这节课,我们来讲解自定义对象排序,假如现在你正在开发一个社交网络应用,有很多用户在使用,他们都有姓,名,生日,用户ID,最喜欢的颜色,等等各种属性,现在要你编写一个算法,通过对象的各个属性来对这个自定义对象进行排列,比如说,对用户ID排序,那么应该怎么实现呢?在这里,还是需要从operator模块中引入attrgetter类,

from operator import attrgetter      

接着我们来模拟创建一个用户类,然后定义它的init函数,这里有2个属性,用户名和用户id:

class User:
def __init__(self, name, id):self.name = nameself.id = id      

然后,我们再定义一个repr函数,这个函数的功能是当需要显示一个对象在屏幕上时,将这个对象的属性或者是方法整理成一个可以打印输出的格式。这里我们定义一个这样的输出格式,把用户名和id通过冒号连接起来:

def __repr__(self):
return self.name + ":" + str(self.id)      

大家可能对这个函数没有直观的了解,所以,我们创建一个用户的列表,然后通过循环将所有的User对象打印出来:

users = [
User('huang', 43),User('Bang', 5),User('www', 6),User('oxox', 8),User('work', 23),]for u in users:print(u)      

运行:

图 6‑16

你看,它会按照repr函数定义的格式将每个User对象打印出来。

但是,打印出来的顺序是按照我们定义的顺序打印的,这里我想对这个对象列表按照指定的方式排序,所以就来到本节课的主题了:对自定义对象进行排序,假如现在我们来对列表对象的name属性排序:

for user in sorted(users, key=attrgetter("name")):
print(user)      

你看,成功的对name属性进行了排序:

图 6‑17

再来对id排序试试:

for user in sorted(users, key=attrgetter("id")):
print(user)      

运行:

图 6‑18

你看,成功的对id进行了排序。

更多精彩内容尽在视频中!