Python实用小知识之对象间的比较

 更新时间:2021年10月13日 10:28:06   作者:米洛丶  
== 和 is 是 Python 中对象比较常用的两种方式,简单来说,'==' 操作符比较对象之间的值是否相等,下面这篇文章主要给大家介绍了关于Python实用小知识之对象间比较的相关资料,需要的朋友可以参考下

前言

今天就结合日常生活的例子,给大家讲讲Python对象之间的比较。(内容不多,小娃儿都能看懂)

场景

米洛今年国庆节打算给新家添置一些日用的东西,比如床、四件套等等。为此,他使用了各大电商平台的app,但因为是新家,所以有些app还没有录入地址。

于是他干脆进行了一波整理,在他的收货地址里面,找寻自己是否添加过最新的地址。

我们都知道,收货地址最重要的就是地址+电话了,通过这个可以确定一个人。因为有些英雄美女喜欢把姓名写成: 喵星人,吴彦祖这样的,所以只要确保地址和电话对得上就行。

那我们就需要比较地址是否有重复的,这样就好好管理自己的收货地址嘛。

代码里的收货地址

我们定义一个Receiver类,里面有name/address/mobile3个字段:

class Receiver(object):

    def __init__(self, name, addr, mobile):
        self.name = name
        self.addr = addr
        self.mobile = mobile


if __name__ == "__main__":
    r = Receiver("小孟", "梅苑小区", 13922222222)
    r2 = Receiver("小孟货", "梅苑小区", 13922222222)
    print(r == r2)

这样我们的生活就映射到了代码之中。由于我们要比较,所以我们这边new了2个收货地址。

我们想要的是,当addr和mobile一致的时候,我们确定这2个收货地址相同。

来看看执行效果:

因为r和r2是2个不同的对象,所以他们是肯定不相等的。

思考: 如果是单例模式的class,r等于r2吗?

了解__eq__方法

我们知道,在Python里面比较数字/字符串是否相等,那2个对象是否相等。其实也是可以比较的。这一切都要归功于__eq__这个方法。

可以看到有个向上的箭头,这个代表子类重写了父类的方法。我们点击一下:

在我们比较2个对象的时候: r == r2, 实际上是执行了这样的方法:

不信咱们试试:

实现

熟悉了__eq__以后,我们问题就迎刃而解了。我们只需要在__eq__方法里面写上对应的判断方法即可。

class Receiver(object):

    def __init__(self, name, addr, mobile):
        self.name = name
        self.addr = addr
        self.mobile = mobile

    def __eq__(self, other):
        return self.addr == other.addr and self.mobile == other.mobile


if __name__ == "__main__":
    r = Receiver("小孟", "梅苑小区", 13922222222)
    r2 = Receiver("小孟", "梅苑小区", 13922222222)
    print(r == r2)

扩展

既然能够比较对象是否相等,那能否比较对象大小呢?那就等大家自己探索了,关键字:

lt, gt, ge, le

另外,还有__str__, __repr__, __hash__等方法,大家感兴趣也可以自己重写着玩玩。

总结

到此这篇关于Python实用小知识之对象间比较的文章就介绍到这了,更多相关Python对象的比较内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pygame实现时钟效果

    pygame实现时钟效果

    这篇文章主要为大家详细介绍了pygame实现时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Python图像处理之边缘检测原理详解

    Python图像处理之边缘检测原理详解

    边缘检测是图像处理和计算机视觉当中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。本文将通过示例和大家介绍一下边缘检测的原理,希望对大家有所帮助
    2022-12-12
  • python实现浪漫的烟花秀

    python实现浪漫的烟花秀

    这篇文章主要为大家详细介绍了python实现浪漫的烟花秀,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Pythonic版二分查找实现过程原理解析

    Pythonic版二分查找实现过程原理解析

    这篇文章主要介绍了Pythonic版二分查找实现过程原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Python生成随机数字和字符详情

    Python生成随机数字和字符详情

    这篇文章主要介绍了Python生成随机数字和字符详情,random是python自带库,使用前导入import random即可,更多相关内容需要的朋友可以参考一下
    2022-07-07
  • 浅谈一下python线程池简单应用

    浅谈一下python线程池简单应用

    这篇文章主要介绍了浅谈一下python线程池简单应用,线程池在系统启动时即创建大量空闲的线程,程序只要将一个函数提交给线程池,线程池就会启动一个空闲的线程来执行它,需要的朋友可以参考下
    2023-04-04
  • 在Python中使用异步Socket编程性能测试

    在Python中使用异步Socket编程性能测试

    异步网络据说能极大的提高网络server的连接速度,所以打算写一个专题,来学习和了解异步网络.因为Python有个非常出名的异步Lib:Twisted,所以就用Python来完成.
    2014-06-06
  • Python项目管理工具Poetry使用示例详解

    Python项目管理工具Poetry使用示例详解

    这篇文章主要为大家介绍了Python项目管理工具Poetry使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • PyQt5 界面显示无响应的实现

    PyQt5 界面显示无响应的实现

    这篇文章主要介绍了PyQt5 界面显示无响应的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 利用Python检测URL状态

    利用Python检测URL状态

    最近小编接到这样的需求,Python检测URL状态,并追加保存200的URL。接下来通过实例代码给大家分析讲解,需要的朋友跟随小编一起看看吧
    2019-07-07

最新评论