python實(shí)現(xiàn)比較類的兩個(gè)instance(對(duì)象)是否相等的方法分析
本文實(shí)例講述了python實(shí)現(xiàn)比較類的兩個(gè)instance(對(duì)象)是否相等的方法。分享給大家供大家參考,具體如下:
對(duì)于同一個(gè)Class,可以創(chuàng)建不同的實(shí)例(instance), 如何比較這兩個(gè) instance 是否相等呢?我們知道,對(duì)于計(jì)算機(jī)來說,要判斷兩個(gè)對(duì)象是否相等,就是看在內(nèi)存中的地址是否同一個(gè)。如果內(nèi)存地址一樣,那么肯定是相等的。這種情況通常出現(xiàn)在一個(gè)對(duì)象是另外一個(gè)對(duì)象的引用時(shí)出現(xiàn)。
但在實(shí)際的開發(fā)過程中,要比較兩個(gè)對(duì)象是否相等,并不是通過內(nèi)存地址來判斷的,而是通過這兩個(gè)對(duì)象的部分屬性值,或者全部屬性值來對(duì)比判斷的。
假設(shè)有一個(gè)職員Class, 我們分別創(chuàng)建了兩個(gè)對(duì)象
class Staff(object): def __init__(self,id,name,sex): self.id=id self.name=name self.sex=sex
我們這樣認(rèn)為,如果id 相同,則表示兩個(gè)對(duì)象相等,id姑且表示身份證編號(hào)吧,如果身份證編號(hào)相同,那么肯定是同一人,在實(shí)際的項(xiàng)目中會(huì)遇到這樣的情況。
創(chuàng)建對(duì)象并查看各自的內(nèi)存地址
staff1=Staff("123456","張三","男") staff2=Staff("123456","李四","女") print id(staff1),id(staff2) #12327248 12327184
結(jié)果很明顯,在不同的內(nèi)存地址,這時(shí)候如果判斷 staff1==staff2
,結(jié)果肯定是 False。
如何滿足我們的需要,只要id 相同的對(duì)象,就認(rèn)為是相等的對(duì)象呢,有如下幾種方法:
1.重載 Staff Class 的 __eq__ 方法
class Staff(object): def __init__(self,id,name,sex): self.id=id self.name=name self.sex=sex def __eq__(self,other): return self.id==other.id staff1=Staff("123456","張三","男") staff2=Staff("123456","李四","女") print id(staff1),id(staff2) print staff1==staff2 #True
結(jié)果返回為 true,說明是相等的,但在計(jì)算機(jī)中的內(nèi)存地址,肯定是不一樣的。這里重載了__eq__方法,當(dāng)然你還可以 增加比較條件,例子中只對(duì)比了id. 用同樣的方法,還可以實(shí)現(xiàn) 兩個(gè)對(duì)象相加等操作,重載__add__ 方法。
2.直接屬性值對(duì)比來實(shí)現(xiàn)
staff1=Staff("123456","張三","男") staff2=Staff("123456","李四","女") print id(staff1),id(staff2) print staff1.__dict__ print staff2.__dict__ if staff1.__dict__['id']==staff2.__dict__['id']: print 'yes,equal'
你會(huì)發(fā)現(xiàn),這樣也是可以的,同樣也可以對(duì)比多個(gè)屬性,這里的重點(diǎn)是用到了python Class 的 __dict__系統(tǒng)內(nèi)置方法來實(shí)現(xiàn)。
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
django1.11.1 models 數(shù)據(jù)庫同步方法
今天小編就為大家分享一篇django1.11.1 models 數(shù)據(jù)庫同步方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python中使用__new__實(shí)現(xiàn)單例模式并解析
單例模式是一個(gè)經(jīng)典設(shè)計(jì)模式,簡要的說,一個(gè)類的單例模式就是它只能被實(shí)例化一次,實(shí)例變量在第一次實(shí)例化時(shí)就已經(jīng)固定。 這篇文章主要介紹了Python中使用__new__實(shí)現(xiàn)單例模式并解析 ,需要的朋友可以參考下2019-06-06Python 轉(zhuǎn)移文件至云對(duì)象存儲(chǔ)的方法
對(duì)象存儲(chǔ)(Cloud Object Storage,COS)是一種存儲(chǔ)海量文件的分布式存儲(chǔ)服務(wù),具有高擴(kuò)展性、低成本、可靠安全等優(yōu)點(diǎn)。這篇文章主要介紹了Python 轉(zhuǎn)移文件至云對(duì)象存儲(chǔ),需要的朋友可以參考下2021-02-02