Python判断对象是否相等及eq函数的讲解

作者:Lee_Tech 时间:2022-04-13 03:15:22 

摘要

  • 什么是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中。

来源:https://blog.csdn.net/lk7688535/article/details/80975688

标签:python,判断,eq函数
0
投稿

猜你喜欢

  • conn.execute的用法

    2008-07-03 12:58:00
  • ASP ,IP地址分段计算

    2008-04-13 06:55:00
  • php巧获服务器端信息

    2023-10-04 02:18:39
  • 关于Python包导入报错的问题总结

    2021-02-05 18:13:46
  • 教你制作1px边框表格的四种方法

    2008-10-04 10:16:00
  • asp+ajax仿google搜索提示效果代码

    2011-03-09 10:52:00
  • Debugging JavaScript:throw与console

    2008-08-29 17:03:00
  • PHPExcel冻结(锁定)表头的简单实现方法

    2023-08-18 02:35:21
  • 跨浏览器实现float:center,No CSS hacks

    2008-08-22 12:59:00
  • 发布淘宝开源编辑器 KISSY Editor 1.0.0

    2009-10-27 16:20:00
  • python 获取计算机的网卡信息

    2023-08-11 21:12:06
  • python爬虫 urllib模块反爬虫机制UA详解

    2022-04-07 02:22:51
  • pygame外星人入侵小游戏超详细开发流程

    2021-06-15 05:15:47
  • python中文编码与json中文输出问题详解

    2021-03-15 17:57:18
  • Javascript中的isNaN函数使用说明

    2023-08-27 10:10:02
  • 理解SQL SERVER中的逻辑读,预读和物理读

    2012-01-05 19:32:29
  • 使用Abot中文分词组件来开发ASP站内搜索引擎

    2007-10-18 13:36:00
  • asp使用正则自动解析图片地址并保存

    2007-08-17 11:29:00
  • Python装饰器decorator用法实例

    2023-02-06 23:26:43
  • 简单了解python中的与或非运算

    2021-03-20 01:45:02
  • asp之家 网络编程 m.aspxhome.com