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 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
Python中django学习心得
Dec 06 Python
磁盘垃圾文件清理器python代码实现
Aug 24 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
python使用tkinter库实现五子棋游戏
Jun 18 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
django 中的聚合函数,分组函数,F 查询,Q查询
Jul 25 Python
python flask中动态URL规则详解
Nov 22 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
关于Theano和Tensorflow多GPU使用问题
Jun 19 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
javascript的函数作用域
2014/11/12 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
js获取内联样式的方法
2015/01/27 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
python实现简单遗传算法
2020/09/18 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
Linux面试题LINUX系统类
2014/11/19 面试题
工程师自我评价怎么写
2013/09/19 职场文书
幼儿园长自我鉴定
2013/10/17 职场文书
自荐信的基本格式
2014/02/22 职场文书
安全目标责任书
2014/07/22 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
公司放假通知怎么写
2015/04/15 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
CSS实现鼠标悬浮动画特效
2023/05/07 HTML / CSS