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 相关文章推荐
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
Python网络编程之TCP与UDP协议套接字用法示例
Feb 02 Python
Python实现的质因式分解算法示例
May 03 Python
Python标准库shutil用法实例详解
Aug 13 Python
Python wxPython库Core组件BoxSizer用法示例
Sep 03 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
Nov 20 Python
Python logging设置和logger解析
Aug 28 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
Apr 14 Python
Python基于httpx模块实现发送请求
Jul 07 Python
基于Python绘制子图及子图刻度的变换等的问题
May 23 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 radio 单选框获取与保持值的实现代码
2010/05/15 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
php实现的二分查找算法示例
2017/06/20 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
AngularJS快速入门
2015/04/02 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
python远程邮件控制电脑升级版
2019/05/23 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
银行财务部实习生的自我鉴定
2013/11/27 职场文书
企业员工培训感言
2014/02/26 职场文书
财务总监岗位职责
2014/03/07 职场文书
《桥》教学反思
2014/04/09 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
不错的求职信范文
2014/07/20 职场文书
户籍证明格式
2014/09/15 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
情况说明书怎么写
2015/10/08 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript