Python小技巧:富比较方法的妙用,__lt__、__le__、__eq__、__ne__、__gt__、__ge__。。。
创始人
2024-05-14 19:14:17
0

在这里插入图片描述

前言

这里是Python小技巧的系列文章。这是第二篇,富比较方法的妙用。

Python中,富比较方法共6个,如下表所示:

  • 见名知意,富比较主要用于比较。
富比较方法使用释义释义
object.__lt__(self, other)x.__lt__(y)xless than
object.__le__(self, other)x.__le__(y)x<=yless and equal
object.__eq__(self, other)x.__eq__(y)x==yequal
object.__ne__(self, other)x.__ne__(y)x!=ynot equal
object.__gt__(self, other)x.__gt__(y)x>ygreater than
object.__ge__(self, other)x.__ge__(y)x>=ygreater and equal

众所周知(我猜你大概率不知!),Python中两个字符串进行比较时候会是按照两个字符串的 Unicode 码位级别进行比较,而不是按照它们的长度来进行比较。如果想要根据它们的长度来进行比较,该如何实现?

带着这个疑问,下面将以 object.__lt__(self, other) 来展开说明它们的作用,
以及重写富比较方法,使得它们更加贴切我们的代码逻辑。


知识点📖📖

富比较方法是类的内置方法,一般时候用不到,除非我们去改写它!

富比较方法https://docs.python.org/zh-cn/3/reference/datamodel.html?#object.lt

字符串比较https://docs.python.org/zh-cn/3/reference/expressions.html#comparisons


如下,Nothing是个什么都没有实现的类。

"""demo.py"""class Nothing:...print(dir(Nothing))

打印查看当前类的所有属性,可以看到包含了上面的6个富比较方法。可见他们是类的内置方法。
在这里插入图片描述


剖析

正常运行

str.__lt__(self, other)返回的是一个布尔值。

运行以下代码,结果打印 True

variable: str = 'hello world'
print(variable.__lt__('yes'))	# True

variable在这里是字符串,strPython的内置类,
str.__lt__ 过去可以看到,该富比较方法返回 self < value,即比较自身和其他值,返回布尔值。

def __lt__(self, *args, **kwargs): # real signature unknown""" Return self

在这里,variable < 'yes'variable.__lt__('yes'),这两句代码的意思是一致的。


如何重写

带着上面的疑问,这里将str.__lt__改写为按照长度比较。

以下代码执行后,打印的结果是 False,这说明我们改写这个富比较方法成功了。

  • len('hello world')长度为11,len('yes')长度为3,11<3,为False
"""demo.py"""class Str(str):def __lt__(self, other):return len(self) < len(other)variable: Str = Str('hello world')
print(variable.__lt__('yes'))	# False

完善重写

在与其它类型的对象进行比较时候,会抛出TypeError 异常。

将上面代码中的最后一行替换为 print(variable.__lt__(1))
运行后抛出TypeError,如下图所示:

在这里插入图片描述

添加一个判断:
如果参与比较的对象类型不是字符串类型,则返回一个 NotImplemented

  • NotImplementedPython内部常量,用于表明运算没有针对其他类型的实现。
class Str(str):def __lt__(self, other):if isinstance(other, str):return len(self) < len(other)return NotImplementedvariable: Str = Str('hello world')
print(variable.__lt__(1))	# NotImplemented

后话

本次介绍及重写了富比较方法中的 object.__lt__(self, other),对于其它富比较方法的重写,方法是完全一致的。本文当是抛砖引玉,为各位提供一点思路~

本次分享到此结束!🐱‍🏍🐱‍🏍

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...