python物件標識就是python物件自身的要素,python物件主要有3要素:
python中的物件是否相等有兩個層面,乙個層面是是否是同乙個物件,及在記憶體中是否共用乙個記憶體區域,用is判斷,另乙個是物件的值是否相等,用==判斷。
我目前用的最多的就是python物件的比較,即比較兩個python物件是否相等,看個例子:
class student(object):
def __init__(self,name,age,***):
self.name = name
self.age = age
self.*** = ***
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,***):
self.name = name
self.age = age
self.*** = ***
def __eq__(self,other):
return self.__dict__ == other.__dict__
print(like == dong) #true
呼叫乙個物件的__dict__方法可以用字典的形式輸出其屬性列表,由於兩個物件的屬性相同,所以==運算為true。
當然在實際情況下,可以更靈活的定義兩個物件相等的條件,比如名字一樣就認為相等。
class student(object):
def __init__(self,name,age,***):
self.name = name
self.age = age
self.*** = ***
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 =
if dong not in list1:
print(len(list1)) #1
list的in操作就是通過==來判斷是否在list中。 Python判斷物件是否相等及eq函式的講解
摘要 python物件的標識 python物件標識就是python物件自身的要素,python物件主要有3要素 物件相等的判斷 python中的物件是否相等有兩個層面,乙個層面是是否是同乙個物件,及在記憶體中是否共用乙個記憶體區域,用is判斷,另乙個是物件的值是否相等,用 判斷。我目前用的最多的就是...
Set 判斷倆個物件是否相等
set判斷倆個物件相同不是使用 運算子,而是根據equals方法。也就是說,如果只要倆個物件用equals方法比較返回true,set就不會接受這個物件,反之,只要來個物件用equals方法返回false,set就會接受這個物件 甚至這倆個物件是同乙個物件,set也可以把他們當成倆個物件 hashs...
java 判斷2個物件是否相等
判斷2個物件是否相等,主要考察的是你對object類的2個方法equals和hashcode以及 的理解。先來說說equals 和 的區別 1.首先,一定要記住,當沒有重寫object的equals方法時,equals的作用和 相同都是用來判斷2個物件的位址是否相等。2.如果重寫了重寫object的...