Python實用小知識之對象間的比較
前言
今天就結合日常生活的例子,給大家講講Python對象之間的比較。(內容不多,小娃兒都能看懂)
場景
米洛今年國慶節(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__等方法,大家感興趣也可以自己重寫著玩玩。
總結
到此這篇關于Python實用小知識之對象間比較的文章就介紹到這了,更多相關Python對象的比較內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python+selenium使用xpath定位的問題及解決
這篇文章主要介紹了python+selenium使用xpath定位的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
pycharm+django創(chuàng)建一個搜索網(wǎng)頁實例代碼
這篇文章主要介紹了pycharm+django創(chuàng)建一個搜索網(wǎng)頁實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01
Python內置函數(shù)zip map filter的使用詳解
這篇文章主要介紹了Python內置函數(shù)zip map filter的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
自己搭建resnet18網(wǎng)絡并加載torchvision自帶權重的操作
這篇文章主要介紹了自己搭建resnet18網(wǎng)絡并加載torchvision自帶權重的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05

