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代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
Win10下Python环境搭建与配置教程
Nov 18 Python
Python 关于反射和类的特殊成员方法
Sep 14 Python
Pandas标记删除重复记录的方法
Apr 08 Python
python pandas读取csv后,获取列标签的方法
Nov 12 Python
celery4+django2定时任务的实现代码
Dec 23 Python
Python中捕获键盘的方式详解
Mar 28 Python
Python中logging日志库实例详解
Feb 19 Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 Python
通过实例简单了解Python sys.argv[]使用方法
Aug 04 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 Python
python爬虫如何解决图片验证码
Feb 14 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
1.PHP简介
2006/10/09 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
JQuery 写的个性导航菜单
2009/12/24 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
JS实现音乐导航特效
2020/01/06 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
python+mysql实现简单的web程序
2014/09/11 Python
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
python修改文件内容的3种方法详解
2019/11/15 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
自动化专业本科毕业生求职信
2013/10/20 职场文书
2014年学生工作总结
2014/11/20 职场文书
公司联欢会主持词
2015/07/04 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
Nginx解决403 forbidden的完整步骤
2021/04/01 Servers
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
详解nginx location指令
2022/01/18 Servers
R9700摩机记
2022/04/05 无线电