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用ConfigObj读写配置文件的实现代码
Mar 04 Python
python根据京东商品url获取产品价格
Aug 09 Python
python pandas实现excel转为html格式的方法
Oct 23 Python
python实现名片管理系统项目
Apr 26 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
Sep 11 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
使用Python实现分别输出每个数组
Dec 06 Python
给Python学习者的文件读写指南(含基础与进阶)
Jan 29 Python
python怎么删除缓存文件
Jul 19 Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 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中防止SQL注入最好的方法是什么
2013/06/10 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
json数据的列循环示例
2013/09/06 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
python实现排序算法
2014/02/14 Python
Python 自动补全(vim)
2014/11/30 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2012/11/25 面试题
四风对照检查材料范文
2014/09/27 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
指导老师鉴定意见
2015/06/05 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS