美文网首页
Python小知识之对象的比较

Python小知识之对象的比较

作者: 米洛丶 | 来源:发表于2021-10-12 16:26 被阅读0次

好久不见

国庆回了趟老家,躺平了10天。作息时间基本和小学生差不多,8、9点就睡了, 那滋味别提多舒服了。时间也和小时候过得一样慢了...长时间不更新,还是不行滴,粉都快掉没了。

今天就结合日常生活的例子,给大家讲讲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个收货地址相同

来看看执行效果:

可以看到,并不ok

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

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

了解eq方法

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

我们编写__op__方法

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

可以看到跳转到了object的定义,而Python的类都是继承自object的,所以子类也就带有了__eq__方法

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

r.__eq__(r2)

不信咱们试试:

image

实现

熟悉了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)
image

扩展

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

lt, gt, ge, le

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

相关文章

  • Python小知识之对象的比较

    好久不见 国庆回了趟老家,躺平了10天。作息时间基本和小学生差不多,8、9点就睡了, 那滋味别提多舒服了。时间也和...

  • Python面向对象之访问控制!

    回顾 在Python进阶记录之基础篇(十五)中,我们介绍了面向对象的基本概念以及Python中类和对象的基础知识,...

  • 2018-07-24 比较、相等和真值

    所有的python对象都支持比较操作——测试相等性、相对大小等。python对象的比较是比较对象上所有的部分,即使...

  • python中的is, ==与对象的相等判断

    一、python对象的"==、is"比较 """1、python的比较总是检查复合对象的所有部分,直到可以得出结果...

  • Python对象的身份比较

    相较于值的比较,Python也支持身份的比较。 身份比较运算符: 什么是身份比较 所谓身份比较,即判断两个或更多的...

  • 营销比赛二三事

    Python面向对象编程三大特性调研 Python面向对象之封装 在Python中,没有类似 private 之类...

  • lambda 表达式

    python之lambda 好久没有看python,一些基础知识都忘记了,而且之前的笔记也比较少,现在重新学习并将...

  • 1.2数字

    一、python数值类型基本知识 完整的python数值类型工具包括: 整数和浮点对象 复数对象 小数:固定精度对...

  • 07 Python对象的比较、 拷贝

    目录链接:https://www.jianshu.com/p/e1e201bea601 '==' VS 'is' ...

  • Python对象的比较和拷贝

    李文轩 2019-08-17声明:这是本人学习极客时间的Python核心技术与实战的笔记,有侵权请联系我。 ' =...

网友评论

      本文标题:Python小知识之对象的比较

      本文链接:https://www.haomeiwen.com/subject/qktjoltx.html