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 相关文章推荐
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
python列表操作实例
Jan 14 Python
python使用wxPython打开并播放wav文件的方法
Apr 24 Python
Python实现八大排序算法
Aug 13 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
May 24 Python
python3实现爬取淘宝美食代码分享
Sep 23 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
python交互界面的退出方法
Feb 16 Python
Python定义函数功能与用法实例详解
Apr 08 Python
python基于itchat模块实现微信防撤回
Apr 29 Python
tensorflow之变量初始化(tf.Variable)使用详解
Feb 06 Python
python中random.randint和random.randrange的区别详解
Sep 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+oracle 分页类
2006/10/09 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
PHP的PDO连接讲解
2019/01/24 PHP
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
一起来写段JS drag拖动代码
2010/12/09 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
[04:32]DOTA2著名解说配音敌法师 现场专访海涛怒切假腿
2013/12/20 DOTA
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
python实现双色球随机选号
2020/01/01 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
体育教师自我鉴定
2014/02/12 职场文书
园艺师求职信
2014/03/10 职场文书
快餐公司创业计划书
2014/04/29 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL