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显示进度条的方法
Sep 20 Python
Python中操作mysql的pymysql模块详解
Sep 13 Python
Python实现获取邮箱内容并解析的方法示例
Jun 16 Python
python实现移位加密和解密
Mar 22 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
tf.concat中axis的含义与使用详解
Feb 07 Python
django正续或者倒序查库实例
May 19 Python
Python爬取YY评级分数并保存数据实现过程解析
Jun 01 Python
Jupyter安装链接aconda实现过程图解
Nov 02 Python
Python 文本滚动播放器的实现代码
Apr 25 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输出数组中重名的元素的几种处理方法
2012/09/05 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
vue下拉列表功能实例代码
2018/04/08 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
tensorflow构建BP神经网络的方法
2018/03/12 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
python爬虫基础知识点整理
2020/06/02 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
关于Java String的一道面试题
2013/09/29 面试题
会计专业自我鉴定范文
2013/12/29 职场文书
旷课检讨书3000字
2014/02/04 职场文书
北体毕业生求职信
2014/02/28 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
联村联户简报
2015/07/21 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android
选购到合适的激光打印机
2022/04/21 数码科技