python调用函数出现未定义_Python中自定义类未定义__lt__方法使用sort/sorted排序会怎么处理?...

news/2024/7/8 16:28:57

在《第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析》中介绍了排序方法sort和函数sorted在没有提供key参数的情况下默认调用lt方法来进行排序比较,如果类中没有定义lt方法Python会怎么处理?

我们直接看案例:

一、 案例说明

本文案例直接在《第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析》基础上通过两个三引号注释掉lt方法的定义,然后定义实例列表进行排序。

二、 案例代码

>>> class Car():

def __init__(self,carname,oilcper100km, price):

self.carname,self.oilcper100km,self.price = carname,oilcper100km, price

'''def __lt__(self,other):

print("execute __lt__")

return self.price

def __le__(self,other):

print("execute __le__")

return self.price>other.price

def __gt__(self,other):

print("execute __gt__")

return self.oilcper100km>other.oilcper100km

def __ge__(self,other):

print("execute __ge__")

return self.oilcper100km

def __repr__(self):

#return f"('{self.carname}',{self.oilcper100km},{self.price})"

return str(self.__dict__)

>>> car1,car2,car3 = Car('爱丽舍',8,10),Car('凯美瑞',7,27),Car('科帕奇',12,23)

>>> cars=[car1,car2,car3]

>>> cars.sort()

execute __gt__

execute __gt__

execute __gt__

>>> cars

[{'carname': '凯美瑞', 'oilcper100km': 7, 'price': 27}, {'carname': '爱丽舍', 'oilcper100km': 8, 'price': 10}, {'carname': '科帕奇', 'oilcper100km': 12, 'price': 23}]

>>>

三、 案例截图

2f3bed983dce

在这里插入图片描述

四、 案例分析

从上述案例可以看到,注释掉lt方法后,在未指定key参数的情况下Python排序方法调用了gt方法,并按gt方法比较大小的模式实现了数据排序,其实这与《Python的富比较方法lt、gt之间的关联关系分析》是一致的。

最后,如果gt方法也没有定义会怎么样?在此就不深入介绍,根据老猿的验证,如果lt和gt方法都没定义,其他富比较方法实现了,Python无法执行排序操作,会报异常:TypeError: '<' not supported between instances of XX and XX。


http://www.niftyadmin.cn/n/3013092.html

相关文章

微型计算机控制技术 无纹波 考试,中南大学2005级计算机控制技术

中南大学微型计算机控制技术试题中南大学考试试卷学期 时间 计算机控制技术 课程 48 学时 4 学分 考试形式&#xff1a; 开 卷专业年级&#xff1a; 自动化05级 总分100分&#xff0c;占总评成绩70 %注&#xff1a;此页不作答题纸&#xff0c;请将答案写在答题纸上一、简答题(本…

problem a: 简单的整数排序_学习笔记-详解基数排序

本文目的上一章节已经详细的向大家介绍过排序的相关概念(详见学习笔记-排序简单介绍) &#xff0c;本文旨在为大家详细的介绍基数排序。基数排序基数排序(radix sort)属于"分配式排序"(distribution sort)&#xff0c;又称"桶子法"(bucket sort)或bin sort…

主治医生计算机怎么选报科目,内科主治医师人机对话考试常见问题

医学教育网搜集整理卫生资格考试人机对话常见问题&#xff0c;分享给大家&#xff0c;如下&#xff1a;什么是“人机对话”人机对话是借助计算机及网络技术对考试进行实施、管理的一种测试形式&#xff1b;它可以根据考试设计的需求&#xff0c;有针对性地进行命题、组卷&#…

fastjson版本_Fastjson 被曝出“高危”远程代码执行漏洞

5 月 28 日&#xff0c;360 网络安全响应中心(360-CERT)发布“Fastjson 远程代码执行漏洞通告”。通告称&#xff0c; Java 库 fastjson < 1.2.68 版本存在远程代码执行漏洞&#xff0c;漏洞被利用可直接获取服务器权限。360 网络安全响应中心评定其为“高危漏洞”&#xff…

Android开发之多媒体——显示手机存储的图片

在Android中多媒体文件&#xff08;音乐/视频/图片&#xff09;是通过MediaStore来统一管理的&#xff0c;本文所演示的例子是通过MediaStore获取手机存储中的图片&#xff0c;然后在Gallery中显示出来。例子最后的效果&#xff1a;下面先贴出本文需要添加和修改的文件&#xf…

python在水文领域中的应用_python在水利工程或者水文方向上有什么案例可以学习一下么?或者还要学什么库。?...

Python在水文水利方面的用途我接触过的大概四类。 一是画图&#xff0c;这个主要是用matplotlib。matplotlib基本是照搬matlab的画图功能&#xff0c;很多命令都不带改的&#xff0c;如果你没有正版matlab&#xff08;又不愿意用盗版&#xff09;&#xff0c;完全可以用matplot…

Android开发之dp

关于Android的dp和sp单位&#xff0c;相信大家一定有很多疑问&#xff1f;下面的答案直接来自本人在知乎的回答。出处&#xff1a;http://www.zhihu.com/question/20697111/answer/227226711.在Xdpi下绘制Xpx长度&#xff0c;实际的物理距离都是1英寸&#xff0c;为什么一定要选…

python顺序结构的表示_Python学习笔记3——三大结构:顺序,分支,循环3

顺序 自上而下&#xff0c;依次执行 分支 分支的基本语法 if 条件表达式&#xff1a; 语句1 语句2 语句3 ...... 条件表达式就是计算结果必须为布尔值的表达式 表达式后面的冒号不能少 注意if后面的出现的语句&#xff0c;如果属于if语句块&#xff0c;则必须同一个锁紧等级 条…