好久不见

国庆回了趟老家,躺平了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个收货地址相同

来看看执行效果:

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

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

了解__eq__方法

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

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

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

r.__eq__(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.addr if __name__ == "__main__":
r = Receiver("小孟", "梅苑小区", 13922222222)
r2 = Receiver("小孟", "梅苑小区", 13922222222)
print(r == r2)

扩展

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

lt, gt, ge, le

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

Python小知识之对象的比较的更多相关文章

  1. [Python][小知识][NO.2] Python 字符串跨行连接,或拆分为多行显示

    1.前言 又是一个字符串很长,但又是一种格式的小字符串直接连接而成的大字符串. 这么我们拆成多行,即美感,又易于我们修改. 例如 文件选择框中的 通配符: wildcard = "Pytho ...

  2. 5个有趣的Python小知识,结果令人意外

    1 字符串驻留 如果上面例子返回True,但是下面例子为什么是False: 这与Cpython 编译优化相关,行为称为字符串驻留,但驻留的字符串中只包含字母,数字或下划线. 2 相同值的不可变对象 这 ...

  3. python小知识-__call__和类装饰器的结合使用,数据描述符__get__\__set__\__delete__(描述符类是Python中一种用于储存类属性值的对象)

    class Decorator(): def __init__(self, f): print('run in init......') self.f = f def __call__(self, a ...

  4. Python 小知识 杂七杂八 随手记

    1.assert 断言语句 例1:    print ‘11111111111’ assert 1==2 print ‘22222222’ 如果没有 assert 程序会输出  ‘1111111111 ...

  5. python小知识,字典

    知识融合在代码中 """ create:2020年12月20日 功能:字典的部分使用方法 """ #空字典 dic={} print(&qu ...

  6. python 小知识

    PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找. 使用下面的代码可以打印PYTHONPATH: print(os.sys.path) impr ...

  7. [Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件

    1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...

  8. [Python][小知识][NO.4] wxPython 字体选择对话框(O.O 不知道放到那里就放到这个分类的)

    1.前言 O.O 前两天回家浪了两天,断更了 哎~~~ o.o 有时候,有木有想改标签或编辑框中内容的字体呀?(o.o 反正我是没有). wxpython也可以说是所在的操作系统,有字体选择器,给我们 ...

  9. python小知识——__name__ = '__main__' 的作用

    很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...

随机推荐

  1. 转:C语言自增自減问题总结

    C语言自增自減问题总结 在程序设计中,经常遇到"i=i+1"和"i=i-1"这两种极为常用的操作.C语言为这种操作提供了两个更为简洁的运算符,即++和--,分别 ...

  2. 微信小程序学习笔记二 列表渲染 + 条件渲染

    1. 列表渲染 1.1 wx:for 在组件上使用wx:for控制属性绑定一个数组, 即可使用数组中各项的数据重复渲染该组件 默认数组的当前项的下标变量名默认为 index, 数组当前项的变量名默认为 ...

  3. 【C语言】第2章 算法 — 程序的灵魂

    第2章 算法 - 程序的灵魂 一个程序主要包括以下两方面的信息: 对数据的描述.在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式 也就是数据结构(data structure) 对操作的描 ...

  4. spring动态切换数据源(一)

    介绍下spring数据源连接的源码类:| 1 spring动态切换连接池需要类AbstractRoutingDataSource的源码 2 /* 3 * Copyright 2002-2017 the ...

  5. Ajax的GET,POST方法传输数据和接收返回数据

    //首先创建一个Ajax对象 function ajaxFunction(){ var xmlHttp; try{ // Firefox, Opera 8.0+, Safari xmlHttp=new ...

  6. MySQL主从复制NEW

    1.复制配置     主机一定要开启二进制日志(这里建议配置RBR)     每个主机和每个从机一定要配置一个位移的id,即server-id     每个从机配置一定要包含主机名称,日志名称,和位置 ...

  7. Qt5之坐标系统

    窗口坐标为逻辑坐标,是基于视口坐标系的. 视口坐标为物理坐标,是基于绘图设备坐标系的 窗口坐标始终以视口坐标为最终目标进行映射: QPainter::setWindow 修改了窗口位置和大小(左上角重 ...

  8. Linux的LCD驱动分析及移植

    测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 LCD驱动分析 LCD屏的驱动总体上分成两块,一块是GUI ...

  9. python-request 实现企业微信接口自动化-1(DDT)

    环境准备 python+requests 读取企业微信api开发文档,得知调用企业微信接口必须先获取企业微信的accesstoken是通过 ("corpid","&quo ...

  10. 枚举类enum

    一.枚举类 package com.xxx.xf.common.enums; import com.xxx.xf.workday.contant.HolidayContant; /** * @Auth ...