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

yipeiwu_com5年前Python基础

摘要

  • 什么是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设计】的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

Django RBAC权限管理设计过程详解

Django RBAC权限管理设计过程详解

一.权限简介 1. 问:为什么程序需要权限控制? 答:生活中的权限限制,① 看灾难片电影《2012》中富人和权贵有权登上诺亚方舟,穷苦老百姓只有等着灾难的来临;② 屌丝们,有没有想过为...

python在linux中输出带颜色的文字的方法

python在linux中输出带颜色的文字的方法

在开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端中。而一般的应用服务器,第三方库,甚至服务器的一些通告也会在终端中显示,这样就搅乱...

Python设计实现的计算器功能完整实例

Python设计实现的计算器功能完整实例

本文实例讲述了Python设计实现的计算器功能。分享给大家供大家参考,具体如下: 通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) *...

基于Python获取城市近7天天气预报

基于Python获取城市近7天天气预报

这篇文章主要介绍了基于Python获取城市近7天天气预报,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先,我们打开中国天气网,找到...

Django自定义用户认证示例详解

Django自定义用户认证示例详解

前言 Django附带的认证对于大多数常见情况来说已经足够了,但是如何在 Django 中使用自定义的数据表进行用户认证,有一种较为笨蛋的办法就是自定义好数据表后,使用OnetoOne...