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 MySQLdb Linux下安装笔记
May 09 Python
利用Python实现图书超期提醒
Aug 02 Python
分享一个可以生成各种进制格式IP的小工具实例代码
Jul 28 Python
对python以16进制打印字节数组的方法详解
Jan 24 Python
python如何实现代码检查
Jun 28 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
Python如何在main中调用函数内的函数方式
Jun 01 Python
QML实现钟表效果
Jun 02 Python
Python pathlib模块使用方法及实例解析
Oct 05 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 Python
python实现计算图形面积
Feb 22 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
PHP 超链接 抓取实现代码
2009/06/29 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
python使用自定义user-agent抓取网页的方法
2015/04/15 Python
pyqt5实现登录界面的模板
2020/05/30 Python
Python秒算24点实现及原理详解
2019/07/29 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
python安装本地whl的实例步骤
2019/10/12 Python
利用python汇总统计多张Excel
2020/09/22 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
一夜的工作教学反思
2014/02/08 职场文书
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技