第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__两个方法,ltlegt、__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

请大家多多支持,点赞、评论和加关注!谢谢!

posted on 2019-07-08 07:35  老猿Python  阅读(450)  评论(0编辑  收藏  举报