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 多进程通信模块的简单实现
Feb 20 Python
使用Python神器对付12306变态验证码
Jan 05 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
浅谈Python实现Apriori算法介绍
Dec 20 Python
python 动态加载的实现方法
Dec 22 Python
Django分页功能的实现代码详解
Jul 29 Python
python生成requirements.txt的两种方法
Sep 18 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
Python Pandas 转换unix时间戳方式
Dec 07 Python
基于python实现百度语音识别和图灵对话
Nov 02 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 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下使用无限生命期Session的方法
2007/03/16 PHP
hadoop中一些常用的命令介绍
2013/06/19 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
php+MySQL实现登录时验证登录名和密码是否正确
2016/05/10 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
javascript每日必学之循环
2016/02/19 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
详解python调度框架APScheduler使用
2017/03/28 Python
Django stark组件使用及原理详解
2019/08/22 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
给男朋友的道歉信
2014/01/12 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
离婚起诉书范本
2015/05/18 职场文书
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server