也就是说,先按点赞数排序,如果点赞数相等,其次才按浏览数,最后才是评论数。
此外,如果要实现再set里面增加时,要保证不增加重复的,需要增加__hash__()
实现:
class Post:
""""""
def __init__(self,postname='',zan_num=0,view_num=0,reply_num=0):
self.postname = postname
self.zan_num = zan_num
self.view_num - view_num
self.reply_num = reply_num
def __cmp__(self,other):
if self.__eq__(other):
return 0
elif self.__lt__(other):
return -1
elif self.__gt__(other):
return 1
def __eq__(self,other):
if not isinstance(other,Post):
raise TypeError,"can't cmp other type to Post!"
if self.zan_num == other.zan_num and self.view_num == other.view_num and self.reply_num == reply_num:
return True
else:
return False
def __lt__(self,other):
if not isinstance(other,Post):
raise TypeError,"can't cmp other type to Post!"
if self.zan_num < other.zan_num:
return True
elif self.zan_num == other.zan_num and self.view_num < other.view_num:
return True
elif self.zan_num == other.zan_num and self.view_num = other.view_num and self.reply_num < other.reply_num:
return True
else:
return False
def __gt__(self,other):
if not isinstance(other,Post):
raise TypeError,"can't cmp other type to Post!"
if self.zan_num > other.zan_num:
return True
elif self.zan_num == other.zan_num and self.view_num > other.view_num:
return True
elif self.zan_num == other.zan_num and self.view_num = other.view_num and self.reply_num > other.reply_num:
return True
else:
return False
def __hash__(self):
return hash(self.postname)
#比较
post1 = Post('abc',42,12,33)
post2 = Post('acc',52,65,34)
post3 = Post('adc',42,13,53)
post4 = Post('aec',33,12,22)
print 'post2>post1':post1>post2
#排序:
post_lst = [post1,post2,post3,post4]
post_lst.sort(key=lambda obj:obj, reverse=True)