第8.21节 Python中__lt__、__gt__等 “富比较”(“rich comparison”)方法用途探究
一、 富比较方法
Python的基类object提供一系列可以用于实现同类对象进行“比较”的方法,可以用于同类对象的不同实例进行比较。他们也是实例方法,定义如下:
object.lt(self, other)
object.le(self, other)
object.eq(self, other)
object.ne(self, other)
object.gt(self, other)
object.ge(self, other)
其中self是指对象自身,other是参与比较的另一对象,返回值最好为bool值,也可以是任意值。
以上这些方法,object类实现了__eq__和__ne__两个方法,lt、le、gt、__ge__这些方法默认返回值为“NotImplemented”,需要自定义类实现这些方法才能正确使用这些方法,当然__eq__和__ne__这两个方法也可以重写。
二、 富比较方法的使用
这些特殊方法除了直接调用外,当用运算符进行对象比较时也会被调用,运算符号与方法名称的对应关系如下:x<y 调用 x.__lt__(y)、x<=y 调用 x.__le__(y)、x==y 调用 x.__eq__(y)、x!=y 调用 x.__ne__(y)、x>y 调用 x.__gt__(y)、x>=y 调用 x.__ge__(y)
。比较运算符之间没有其他隐含关系,例如 (x<y or x==y) 为真并不意味着 x<=y。具体要看实现的方法。
如果指定的参数对没有相应的实现,富比较方法可能会返回单例对象 NotImplemented。按照惯例,成功的比较会返回 False 或 True。不过实际上这些方法可以返回任意值,因此如果比较运算符是要用于布尔值判断(例如作为 if 语句的条件),Python 会对返回值调用 bool() 以确定结果为真还是假。
具体实现时,编程者可以根据一定的业务规则来设置两个对象的一个或多个属性经过运算后的比较,根据比较结果确认返回值。这些方法在支持复杂的数学运算类型对象、排序类型对象进行比较时非常有用,开发人员可以根据自己的需要定制”大和小”的判断规则。
本节简单介绍了Python的富比较方法,在此暂时不介绍相关实现案例,大家可以自己动手练习一下。下节将介绍重写相关方法的案例。
老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython
请大家多多支持,点赞、评论和加关注!谢谢!
第8.21节 Python中__lt__、__gt__等 “富比较”(“rich comparison”)方法用途探究的更多相关文章
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
- 第11.21节 Python 中正则表达式的其他扩展功能
一. 引言 在<第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是正则表达式的扩展功能,其实在re模块中 ...
- 第9.10节 Python中IO模块其他文件操作属性和方法简介
本文中所有案例中的fp都是使用open函数打开文件返回的一个文件对象,为了节省篇幅,大部分没有提供文件打开的代码. 一. 文件是否关闭的属性 属性名:closed 功用:判断文件是否关闭 示例: &g ...
- 第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析
一. 引言 <第8.21节 Python中__lt__.gt__等 "富比较"("rich comparison")方法用途探究>和<第8.2 ...
- 第8.27节 Python中__getattribute__与property的fget、@property装饰器getter关系深入解析
一. 引言 在<第7.23节 Python使用property函数定义属性简化属性访问的代码实现>和<第7.26节 Python中的@property装饰器定义属性访问方法gette ...
- 第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类
第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一. 引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不 ...
- 第7.15节 Python中classmethod定义的类方法详解
第7.15节 Python中classmethod定义的类方法详解 类中的方法,除了实例方法外,还有两种方法,分别是类方法和静态方法.本节介绍类方法的定义和使用. 一. 类方法的定义 在类中定 ...
- 第7.22节 Python中使用super调用父类的方法
第7.22节 Python中使用super调用父类的方法 前面章节很多地方都引入了super方法,这个方法就是访问超类这个类对象的.由于super方法的特殊性,本节单独谈一谈super方法. 一.su ...
- 第11.20节 Python 中正则表达式的扩展功能:后视断言、后视取反
一. 引言 在<第11.19节 Python 中正则表达式的扩展功能:前视断言和前视取反>中老猿介绍了前视断言和前视取反,与二者对应的还有后视断言和后视取反. 二. (?<=-)后视 ...
随机推荐
- linux-gcc简要知识点 **
目录 交叉编译 简要知识点 ** 一些概念 GCC编译器 GCC简要使用 GCC编译过程 ** 常用的编译选项 编译多个文件 制作.使用动态库 制作.使用静态库 很有用的选项 参考 交叉编译 使用不同 ...
- Nacos配置中心和服务的注册发现
在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用.Nacos既可以做配置中心,也可以做注册中心.我们先来看看在项目中如何使用Nacos做配置中心. Nac ...
- 内网渗透 day6-msf后门植(windows)
后门植入 目录 1. 持续化后门 2. 手动上传木马并加入注册表中 3. 上传nc 4. 开3389-->shift后门-->远程登入 5. at调用 1. 持续化后门 在提权后的mete ...
- 【转】jps 命令使用
jps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简 ...
- CSS两列布局的多种方式
两列布局(一侧固定宽度,一侧自适应),在工作中应该是经常使用到,可以说是前端基础了.这种两列布局的样式是我们在平时工作中非常常见的设计,同时也是面试中要求实现的高频题.很有必要掌握以备不时之需.这里总 ...
- 关于“Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.”
Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the c ...
- ceph osd tree的可视化
前言 很久没有处理很大的集群,在接触一个新集群的时候,如果集群足够大,需要比较长的时间才能去理解这个集群的结构,而直接去看ceph osd tree的结果,当然是可以的,这里是把osd tree的结构 ...
- symbol lookup error /usr/lib/x86_64-linux-gnu/libstdc++.so.6错误的解决办法
当出现 $ apt-get: symbol lookup error: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: undefined symbol: _ZNS ...
- MySQL 5.x乱码问题解决
MySQL是一款常用的开源数据库软件,但是对于初次使用者好像并不是太友好,MySQL5.x的版本中默认字符集是latin1也就是我们所知道的ISO-8859-1字符集,这个字符集编码并没有包含汉字,所 ...
- python-网络安全编程第七天(base64模块)
前言 睡不着,那就起来学习其实base64模块很早之前用过今天做爬虫的时候有个URL需要用它来编码一下 所以百度又学了一下遇到最大的问题就是python3和python2区别问题 python3的这个 ...