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发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
介绍Python中的__future__模块
Apr 27 Python
Python中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
详解python中requirements.txt的一切
Mar 03 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
python实现聚类算法原理
Feb 12 Python
python实现教务管理系统
Mar 12 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
基于python实现学生管理系统
Oct 17 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
python实现语音常用度量方法的代码详解
May 25 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电台频率大全 - 15 山东省
2020/03/11 无线电
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
javascript Window及document对象详细整理
2011/01/12 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
2014/11/23 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
python使用matplotlib绘制热图
2018/11/07 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
护理学专业推荐信
2013/12/03 职场文书
车辆安全检查制度
2014/01/12 职场文书
就业协议书范本
2014/10/08 职场文书
2015新学期开学寄语
2015/02/26 职场文书
贫困证明怎么写
2015/06/16 职场文书
聘任书的格式及模板
2019/10/28 职场文书
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers