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中列表、字典、元组数据结构的简单学习笔记
Mar 20 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
Python程序退出方式小结
Dec 09 Python
神经网络python源码分享
Dec 15 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
关于python之字典的嵌套,递归调用方法
Jan 21 Python
解决django model修改添加字段报错的问题
Nov 18 Python
TensorFlow索引与切片的实现方法
Nov 20 Python
Python datetime 格式化 明天,昨天实例
Mar 02 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
Python map及filter函数使用方法解析
Aug 06 Python
python读取excel数据并且画图的实现示例
Feb 08 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
php 启动时报错的简单解决方法
2014/01/27 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
2018/05/22 jQuery
关于TypeScript模块导入的那些事
2018/06/12 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
进一步探究Python中的正则表达式
2015/04/28 Python
解读Python编程中的命名空间与作用域
2015/10/16 Python
python实现学生信息管理系统
2020/04/05 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Python super()函数使用及多重继承
2020/05/06 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
一套VC试题
2015/01/23 面试题
2014年安全生产大检查方案
2014/05/13 职场文书
给市场的环保建议书
2014/05/14 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
2015年迎新晚会策划书
2015/07/16 职场文书
Python读写yaml文件
2022/03/20 Python
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript