Python判断对象是否相等及eq函数的讲解
摘要
- 什么是python对象的标识
- python对象相等的判断
- 自定义python对象相等的条件
python对象的标识
python对象标识就是python对象自身的要素,python对象主要有3要素:
- id:相当于对象在内存中的地址,相当于c的指针,可以用id(对象)来获取。
- 类型:python的基本对象有Number、String、List、Tuple、Set、Dictionary六种,当然还有对象的实例化,他们的类型就是对象的类名。可以通过type(对象)来获取。
- 值:对象的值,不解释--。
对象相等的判断
python中的对象是否相等有两个层面,一个层面是是否是同一个对象,及在内存中是否共用一个内存区域,用is判断,另一个是对象的值是否相等,用==判断。
我目前用的最多的就是python对象的比较,即比较两个python对象是否相等,看个例子:
classstudent(object):
def__init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def__eq__(self,*args,**kwargs):
returnobject.__eq__(self,*args,**kwargs)
like=student("like",25,"male")
xue=student("xue",23,"female")
dong=student("like",25,"male")
print(likeisxue)#False
print(likeisdong)#False
print(like==dong)#False
这里有两个student类的实例化对象,like和xue很明显是两个不同的对象,他们的不同体现在所占内存地址不同且对象的属性也不同。
like和dong虽然属性相同,但是is和==两种判断的结果也都为false,在实际情况中,我们大多都希望like和dong属性相同,就认为是同一个对象,所以我们需要重写类的eq方法:
classstudent(object): def__init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def__eq__(self,other): returnself.__dict__==other.__dict__ print(like==dong)#True
调用一个对象的dict方法可以用字典的形式输出其属性列表,由于两个对象的属性相同,所以==运算为True。
自定义python对象相等的条件
当然在实际情况下,可以更灵活的定义两个对象相等的条件,比如名字一样就认为相等。
classstudent(object):
def__init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def__eq__(self,other):
returnself.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)
ifdongnotinlist1:
list1.append(dong)
print(len(list1))#1
list的in操作就是通过==来判断是否在list中。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
热门推荐
10 新人红包祝福语简短精辟
11 幼师给毕业祝福语简短
12 生日高考祝福语妹妹简短
13 下飞机祝福语简短英文
14 元宵发客户祝福语简短
15 爸妈金婚文案祝福语简短
16 新郎朋友红包祝福语简短
17 虎年五一祝福语大全简短
18 出阁宴祝福语姐姐简短