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 __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
把MySQL表结构映射为Python中的对象的教程
Apr 07 Python
举例区分Python中的浅复制与深复制
Jul 02 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
感知器基础原理及python实现过程详解
Sep 30 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
Numpy之reshape()使用详解
Dec 26 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
Window系统下Python如何安装OpenCV库
Mar 05 Python
python获取系统内存占用信息的实例方法
Jul 17 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
Dec 07 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 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分页显示制作详细讲解
2008/11/19 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
arguments对象
2006/11/20 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
vue-music关于Player播放器组件详解
2017/11/28 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
Python学习教程之常用的内置函数大全
2017/07/14 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
java程序员面试交流
2012/11/29 面试题
建筑专业自我鉴定
2013/10/22 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
销售会计岗位职责
2014/03/15 职场文书
争先创优演讲稿
2014/09/15 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
一文搞懂python异常处理、模块与包
2021/06/26 Python