首页 > 编程语言 > 详细

pyhton3.7 自定义类的排序,和pyhton 2.7不能使用的原因

时间:2020-05-12 18:06:10      阅读:54      评论:0      收藏:0      [点我收藏+]

python 2.X的错误




class Image:

    def __init__(self,path,name,boardName):
        self.name = name
        self.boardName = boardName
        self.path = path

    def __cmp__(self, other):
        if self.name > other.name:
            return -1
        elif self.name == other.name:
            return 0
        else:
            return 1

a=Image("a",1589250493309,"1")
b=Image("b",1589250508420,"1")

li = []

li.append(b)
li.append(a)
print(li)
print(sorted(li))


上面的代码会出现 如图的错误
技术分享图片

原因是 :python 3.x 把__cmp__ 给去掉了。虽然你写了这个方法,实际上,这个代码没有生效,没有实现这个类的比较。

文章参考:https://www.zhihu.com/question/47895103

python3.7 的实现


from functools import total_ordering

@total_ordering
class Image:

    def __init__(self,path,name,boardName):
        self.name = name
        self.boardName = boardName
        self.path = path

    def __eq__(self, other):
       return  self.name == other.name

    def __lt__(self, other):
       return  self.name < other.name


a=Image("a",1589250493309,"1")
b=Image("b",1589250508420,"1")

li = []
li.append(b)
li.append(a)

print(li[0].name)
print(sorted(li)[0].name)


pyhton3.7 自定义类的排序,和pyhton 2.7不能使用的原因

原文:https://www.cnblogs.com/xibanqiu/p/12877604.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!