python实现比较类的两个instance(对象)是否相等的方法分析


Posted in Python onJune 26, 2019

本文实例讲述了python实现比较类的两个instance(对象)是否相等的方法。分享给大家供大家参考,具体如下:

对于同一个Class,可以创建不同的实例(instance), 如何比较这两个 instance 是否相等呢?我们知道,对于计算机来说,要判断两个对象是否相等,就是看在内存中的地址是否同一个。如果内存地址一样,那么肯定是相等的。这种情况通常出现在一个对象是另外一个对象的引用时出现。

但在实际的开发过程中,要比较两个对象是否相等,并不是通过内存地址来判断的,而是通过这两个对象的部分属性值,或者全部属性值来对比判断的。

假设有一个职员Class, 我们分别创建了两个对象

class Staff(object):
 def __init__(self,id,name,sex):
  self.id=id
  self.name=name
  self.sex=sex

我们这样认为,如果id 相同,则表示两个对象相等,id姑且表示身份证编号吧,如果身份证编号相同,那么肯定是同一人,在实际的项目中会遇到这样的情况。

创建对象并查看各自的内存地址

staff1=Staff("123456","张三","男")
staff2=Staff("123456","李四","女")
print id(staff1),id(staff2)
#12327248 12327184

结果很明显,在不同的内存地址,这时候如果判断 staff1==staff2 ,结果肯定是  False

如何满足我们的需要,只要id 相同的对象,就认为是相等的对象呢,有如下几种方法:

1.重载 Staff Class 的 __eq__ 方法

class Staff(object):
 def __init__(self,id,name,sex):
  self.id=id
  self.name=name
  self.sex=sex
 def __eq__(self,other):
  return self.id==other.id
staff1=Staff("123456","张三","男")
staff2=Staff("123456","李四","女")
print id(staff1),id(staff2)
print staff1==staff2
#True

结果返回为 true,说明是相等的,但在计算机中的内存地址,肯定是不一样的。这里重载了__eq__方法,当然你还可以 增加比较条件,例子中只对比了id. 用同样的方法,还可以实现 两个对象相加等操作,重载__add__ 方法。

2.直接属性值对比来实现

staff1=Staff("123456","张三","男")
staff2=Staff("123456","李四","女")
print id(staff1),id(staff2)
print staff1.__dict__
print staff2.__dict__
if staff1.__dict__['id']==staff2.__dict__['id']:
 print 'yes,equal'

你会发现,这样也是可以的,同样也可以对比多个属性,这里的重点是用到了python Class 的 __dict__系统内置方法来实现。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
用python编写第一个IDA插件的实例
May 29 Python
python实现将汉字保存成文本的方法
Nov 16 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
python用for循环求和的方法总结
Jul 08 Python
解决Django连接db遇到的问题
Aug 29 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
使用python实现对元素的长截图功能
Nov 14 Python
python3 实现函数写文件路径的正确方法
Nov 27 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
Apr 20 Python
Python实现的ftp服务器功能详解【附源码下载】
Jun 26 #Python
利用python numpy+matplotlib绘制股票k线图的方法
Jun 26 #Python
python读csv文件时指定行为表头或无表头的方法
Jun 26 #Python
对Python3之方法的覆盖与super函数详解
Jun 26 #Python
python调用pyaudio使用麦克风录制wav声音文件的教程
Jun 26 #Python
python装饰器常见使用方法分析
Jun 26 #Python
解决python super()调用多重继承函数的问题
Jun 26 #Python
You might like
php常用字符串处理函数实例分析
2014/11/22 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
Hadoop中的Python框架的使用指南
2015/04/22 Python
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
python实现IOU计算案例
2020/04/12 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
体育教育专业自荐信范文
2013/12/20 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
幼儿评语大全
2014/04/30 职场文书
企业员工集体活动方案
2014/08/17 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python