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实现unicode转中文及转换默认编码的方法
Apr 29 Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 Python
Python计算斗牛游戏概率算法实例分析
Sep 26 Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 Python
django开发post接口简单案例,获取参数值的方法
Dec 11 Python
Python3多目标赋值及共享引用注意事项
May 27 Python
python判断一个对象是否可迭代的例子
Jul 22 Python
详解使用django-mama-cas快速搭建CAS服务的实现
Oct 30 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
pyinstaller还原python代码过程图解
Jan 08 Python
Django Form设置文本框为readonly操作
Jul 03 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/12 PHP
VBScript版代码高亮
2006/06/26 Javascript
csdn 批量接受好友邀请
2009/02/19 Javascript
鼠标经过的文本框textbox变色
2009/05/21 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
layui的table中显示图片方法
2018/08/17 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
python logging日志模块的详解
2017/10/29 Python
python逆序打印各位数字的方法
2018/06/25 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
大专生自我鉴定范文
2013/10/01 职场文书
项目资料员岗位职责
2013/12/10 职场文书
中国梦的演讲稿
2014/01/08 职场文书
国际金融专业自荐信
2014/07/05 职场文书
工作目标责任书
2014/07/23 职场文书
挂职学习心得体会
2014/09/09 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
Elasticsearch 批量操作
2022/04/19 Python
使用refresh_token实现无感刷新页面
2022/04/26 Javascript
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js