【Python】判断对象是否相等及eq函数 |
您所在的位置:网站首页 › python相等判断 › 【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对象是否相等,看个例子: 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)) #1list的in操作就是通过==来判断是否在list中。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |