Python實(shí)用小知識之對象間的比較
前言
今天就結(jié)合日常生活的例子,給大家講講Python對象之間的比較。(內(nèi)容不多,小娃兒都能看懂)
場景
米洛今年國慶節(jié)打算給新家添置一些日用的東西,比如床、四件套等等。為此,他使用了各大電商平臺的app,但因?yàn)槭切录遥杂行゛pp還沒有錄入地址。
于是他干脆進(jìn)行了一波整理,在他的收貨地址里面,找尋自己是否添加過最新的地址。
我們都知道,收貨地址最重要的就是地址+電話了,通過這個(gè)可以確定一個(gè)人。因?yàn)橛行┯⑿勖琅矚g把姓名寫成: 喵星人,吳彥祖這樣的,所以只要確保地址和電話對得上就行。
那我們就需要比較地址是否有重復(fù)的,這樣就好好管理自己的收貨地址嘛。
代碼里的收貨地址
我們定義一個(gè)Receiver類,里面有name/address/mobile3個(gè)字段:
class Receiver(object): def __init__(self, name, addr, mobile): self.name = name self.addr = addr self.mobile = mobile if __name__ == "__main__": r = Receiver("小孟", "梅苑小區(qū)", 13922222222) r2 = Receiver("小孟貨", "梅苑小區(qū)", 13922222222) print(r == r2)
這樣我們的生活就映射到了代碼之中。由于我們要比較,所以我們這邊new了2個(gè)收貨地址。
我們想要的是,當(dāng)addr和mobile一致的時(shí)候,我們確定這2個(gè)收貨地址相同。
來看看執(zhí)行效果:
因?yàn)閞和r2是2個(gè)不同的對象,所以他們是肯定不相等的。
思考: 如果是單例模式的class,r等于r2嗎?
了解__eq__方法
我們知道,在Python里面比較數(shù)字/字符串是否相等,那2個(gè)對象是否相等。其實(shí)也是可以比較的。這一切都要?dú)w功于__eq__
這個(gè)方法。
可以看到有個(gè)向上的箭頭,這個(gè)代表子類重寫了父類的方法。我們點(diǎn)擊一下:
在我們比較2個(gè)對象的時(shí)候: r == r2
, 實(shí)際上是執(zhí)行了這樣的方法:
不信咱們試試:
實(shí)現(xiàn)
熟悉了__eq__以后,我們問題就迎刃而解了。我們只需要在__eq__方法里面寫上對應(yīng)的判斷方法即可。
class Receiver(object): def __init__(self, name, addr, mobile): self.name = name self.addr = addr self.mobile = mobile def __eq__(self, other): return self.addr == other.addr and self.mobile == other.mobile if __name__ == "__main__": r = Receiver("小孟", "梅苑小區(qū)", 13922222222) r2 = Receiver("小孟", "梅苑小區(qū)", 13922222222) print(r == r2)
擴(kuò)展
既然能夠比較對象是否相等,那能否比較對象大小呢?那就等大家自己探索了,關(guān)鍵字:
lt, gt, ge, le
另外,還有__str__
, __repr__
, __hash__
等方法,大家感興趣也可以自己重寫著玩玩。
總結(jié)
到此這篇關(guān)于Python實(shí)用小知識之對象間比較的文章就介紹到這了,更多相關(guān)Python對象的比較內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django 解決model中類寫不到數(shù)據(jù)庫中,數(shù)據(jù)庫無此字段的問題
這篇文章主要介紹了django 解決model中類寫不到數(shù)據(jù)庫中,數(shù)據(jù)庫無此字段的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨想過來看看吧2020-05-05python opencv 實(shí)現(xiàn)讀取、顯示、寫入圖像的方法
這篇文章主要介紹了python opencv 實(shí)現(xiàn)讀取、顯示、寫入圖像的方法,本文通示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Python計(jì)時(shí)相關(guān)操作詳解【time,datetime】
這篇文章主要介紹了Python計(jì)時(shí)相關(guān)操作,涉及time,datetime模塊的使用技巧,包括時(shí)間戳、時(shí)間差、日期格式等操作方法,需要的朋友可以參考下2017-05-05詳解Python+OpenCV實(shí)現(xiàn)圖像二值化
圖像二值化就是將圖像上的像素點(diǎn)的灰度值設(shè)置為0或255,也就是將整個(gè)圖像呈現(xiàn)出明顯的黑白效果的過程。本文將通過Python+OpenCV實(shí)現(xiàn)這一過程,感興趣的可以學(xué)習(xí)一下2022-05-05