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实现文件分组复制到不同目录的例子
Jun 04 Python
python文件写入实例分析
Apr 08 Python
python多进程共享变量
Apr 06 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
python实现音乐下载器
Apr 15 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
pandas中read_csv的缺失值处理方式
Dec 19 Python
Python常用编译器原理及特点解析
Mar 23 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
python flappy bird小游戏分步实现流程
Feb 15 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
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
2017/03/21 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
原生javascript如何实现共享onload事件
2020/07/03 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
python为tornado添加recaptcha验证码功能
2014/02/26 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
python是否适合网页编程详解
2019/10/04 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
CSS 3.0 结合video视频实现的创意开幕效果
2020/06/01 HTML / CSS
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
劳动实践课感言
2014/02/01 职场文书
优秀部门获奖感言
2014/02/14 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
教师节祝酒词
2015/08/11 职场文书