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实现ip查询示例
Mar 26 Python
编写Python脚本来获取mp3文件tag信息的教程
May 04 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
Apr 11 Python
Python对字符串实现去重操作的方法示例
Aug 11 Python
Python实现针对给定字符串寻找最长非重复子串的方法
Apr 21 Python
python 保存float类型的小数的位数方法
Oct 17 Python
pyqt5移动鼠标显示坐标的方法
Jun 21 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 Python
Pytorch 实现变量类型转换
May 17 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 Python
Python&Matlab实现灰狼优化算法的示例代码
Mar 21 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 ci框架验证码实例分析
2013/06/26 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
python super用法及原理详解
2020/01/20 Python
python Shapely使用指南详解
2020/02/18 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
银行会计业务的个人自我评价
2013/11/02 职场文书
安全员岗位职责
2013/11/11 职场文书
高三家长寄语
2014/04/03 职场文书
《鲸》教学反思
2016/02/23 职场文书
HAM-2000摩机图
2021/04/22 无线电
Python采集股票数据并制作可视化柱状图
2022/04/04 Python
SQL Server使用导出向导功能
2022/04/08 SQL Server
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS