Python判断对象是否相等及eq函数的讲解


Posted in Python onFebruary 25, 2019

摘要

  • 什么是python对象的标识
  • python对象相等的判断
  • 自定义python对象相等的条件

python对象的标识

python对象标识就是python对象自身的要素,python对象主要有3要素:

  • id:相当于对象在内存中的地址,相当于c的指针,可以用id(对象)来获取。
  • 类型:python的基本对象有Number、String、List、Tuple、Set、Dictionary六种,当然还有对象的实例化,他们的类型就是对象的类名。可以通过type(对象)来获取。
  • 值:对象的值,不解释- -。

对象相等的判断

python中的对象是否相等有两个层面,一个层面是是否是同一个对象,及在内存中是否共用一个内存区域,用is判断,另一个是对象的值是否相等,用==判断。

我目前用的最多的就是python对象的比较,即比较两个python对象是否相等,看个例子:

class student(object):
  def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex
  def __eq__(self, *args, **kwargs):
    return object.__eq__(self, *args, **kwargs)
like = student("like",25,"male")
xue = student("xue",23,"female")
dong = student("like",25,"male")
print(like is xue) #False
print(like is dong) #False
print(like == dong) #False

这里有两个student类的实例化对象,like和xue很明显是两个不同的对象,他们的不同体现在所占内存地址不同且对象的属性也不同。

like和dong虽然属性相同,但是is和==两种判断的结果也都为false,在实际情况中,我们大多都希望like和dong属性相同,就认为是同一个对象,所以我们需要重写类的eq方法:

class student(object):
  def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex
  def __eq__(self,other):
    return self.__dict__ == other.__dict__
print(like == dong) #True

调用一个对象的dict方法可以用字典的形式输出其属性列表,由于两个对象的属性相同,所以==运算为True。

自定义python对象相等的条件

当然在实际情况下,可以更灵活的定义两个对象相等的条件,比如名字一样就认为相等。

class student(object):
  def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex
  def __eq__(self,other):
    return self.name == other.name
like = student("like",25,"male")
dong = student("like",23,"female")    
print(like == dong) #True

实际场景

在实际应用中,有一个场景是处理对象是否在list里,不在就加入。

like = student("like",25,"male")
dong = student("like",25,"male")
list1 = []
list1.append(like)
if dong not in list1:
  list1.append(dong)
print(len(list1)) #1

list的in操作就是通过==来判断是否在list中。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
利用python实现数据分析
Jan 11 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
Apr 06 Python
Python之pandas读写文件乱码的解决方法
Apr 20 Python
python实现比较文件内容异同
Jun 22 Python
Python变量类型知识点总结
Feb 18 Python
django连接oracle时setting 配置方法
Aug 29 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
django列表筛选功能的实现代码
Mar 27 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
Python答题卡识别并给出分数的实现代码
Jun 22 Python
详解django中url路由配置及渲染方式
Feb 25 #Python
利用python脚本如何简化jar操作命令
Feb 24 #Python
Python中如何使用if语句处理列表实例代码
Feb 24 #Python
python实现两张图片的像素融合
Feb 23 #Python
Python判断有效的数独算法示例
Feb 23 #Python
Python实现的旋转数组功能算法示例
Feb 23 #Python
Python实现求两个数组交集的方法示例
Feb 23 #Python
You might like
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
从wamp到xampp的升级之路
2015/04/08 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
jQuery实现可拖拽3D万花筒旋转特效
2017/01/03 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
python3实现UDP协议的服务器和客户端
2017/06/14 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
解析python的局部变量和全局变量
2019/08/15 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
Django rest framework分页接口实现原理解析
2020/08/21 Python
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
开放系统互连参考模型
2016/06/29 面试题
物业管理专业个人的自我评价
2013/11/19 职场文书
大型活动策划方案
2014/01/12 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
学生自我评语
2015/01/04 职场文书
休假证明书
2015/06/24 职场文书
五年级作文之想象作文
2019/10/30 职场文书