Python實用小知識之對象間的比較
今天就結(jié)合日常生活的例子,給大家講講Python對象之間的比較。(內(nèi)容不多,小娃兒都能看懂)
場景
米洛今年國慶節(jié)打算給新家添置一些日用的東西,比如床、四件套等等。為此,他使用了各大電商平臺的app,但因為是新家,所以有些app還沒有錄入地址。
于是他干脆進行了一波整理,在他的收貨地址里面,找尋自己是否添加過最新的地址。
我們都知道,收貨地址最重要的就是地址+電話了,通過這個可以確定一個人。因為有些英雄美女喜歡把姓名寫成: 喵星人,吳彥祖這樣的,所以只要確保地址和電話對得上就行。
那我們就需要比較地址是否有重復的,這樣就好好管理自己的收貨地址嘛。
代碼里的收貨地址
我們定義一個Receiver類,里面有name/address/mobile3個字段:
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個收貨地址。
我們想要的是,當addr和mobile一致的時候,我們確定這2個收貨地址相同。
來看看執(zhí)行效果:
因為r和r2是2個不同的對象,所以他們是肯定不相等的。
思考: 如果是單例模式的class,r等于r2嗎?
了解__eq__方法
我們知道,在Python里面比較數(shù)字/字符串是否相等,那2個對象是否相等。其實也是可以比較的。這一切都要歸功于__eq__
這個方法。
可以看到有個向上的箭頭,這個代表子類重寫了父類的方法。我們點擊一下:
在我們比較2個對象的時候: r == r2
, 實際上是執(zhí)行了這樣的方法:
不信咱們試試:
實現(xiàn)
熟悉了__eq__以后,我們問題就迎刃而解了。我們只需要在__eq__方法里面寫上對應的判斷方法即可。
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)
擴展
既然能夠比較對象是否相等,那能否比較對象大小呢?那就等大家自己探索了,關鍵字:
lt, gt, ge, le
另外,還有__str__
, __repr__
, __hash__
等方法,大家感興趣也可以自己重寫著玩玩。
總結(jié)
到此這篇關于Python實用小知識之對象間比較的文章就介紹到這了,更多相關Python對象的比較內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持本站!
版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。