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编程之变量赋值操作实例分析
Jul 24 Python
Python中的id()函数指的什么
Oct 17 Python
python编程培训 python培训靠谱吗
Jan 17 Python
Python3对称加密算法AES、DES3实例详解
Dec 06 Python
python构建基础的爬虫教学
Dec 23 Python
Python queue队列原理与应用案例分析
Sep 27 Python
Python模拟伯努利试验和二项分布代码实例
May 27 Python
pandas参数设置的实用小技巧
Aug 23 Python
python 利用zmail库发送邮件
Sep 11 Python
python 实现关联规则算法Apriori的示例
Sep 30 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
Python基础之数据结构详解
Apr 28 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 strtr() 函数使用说明
2008/11/21 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
php中引用符号(&)的使用详细介绍
2016/12/06 PHP
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
python K近邻算法的kd树实现
2018/09/06 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
Django框架models使用group by详解
2020/03/11 Python
python RSA加密的示例
2020/12/09 Python
美国折扣网站:jClub
2017/08/07 全球购物
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
银行学习十八大感想
2014/01/11 职场文书
爱心倡议书范文
2014/05/12 职场文书
植树造林的宣传标语
2014/06/23 职场文书
公共场所标语
2014/06/30 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
Python Django获取URL中的数据详解
2021/11/01 Python
python中的random模块和相关函数详解
2022/04/22 Python
Go语言编译原理之变量捕获
2022/08/05 Golang