Python小知識(shí)之對(duì)象的比較

好久不見(jiàn)

國(guó)慶回了趟老家,躺平了10天。作息時(shí)間基本和小學(xué)生差不多,8、9點(diǎn)就睡了, 那滋味別提多舒服了。時(shí)間也和小時(shí)候過(guò)得一樣慢了...長(zhǎng)時(shí)間不更新,還是不行滴,粉都快掉沒(méi)了。

今天就結(jié)合日常生活的例子,給大家講講Python對(duì)象之間的比較。(內(nèi)容不多,小娃兒都能看懂

場(chǎng)景

米洛今年國(guó)慶節(jié)打算給新家添置一些日用的東西,比如床、四件套等等。為此,他使用了各大電商平臺(tái)的app,但因?yàn)槭?code>新家,所以有些app還沒(méi)有錄入地址。

于是他干脆進(jìn)行了一波整理,在他的收貨地址里面,找尋自己是否添加過(guò)最新的地址。

他去掉了一些失效地址

我們都知道,收貨地址最重要的就是地址+電話了,通過(guò)這個(gè)可以確定一個(gè)人。因?yàn)橛行┯⑿勖琅矚g把姓名寫(xiě)成: 喵星人,吳彥祖這樣的,所以只要確保地址和電話對(duì)得上就行。

那我們就需要比較地址是否有重復(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è)收貨地址相同。

來(lái)看看執(zhí)行效果:

可以看到,并不ok

因?yàn)閞和r2是2個(gè)不同的對(duì)象,所以他們是肯定不相等的。

思考: 如果是單例模式的class,r等于r2嗎?

了解eq方法

我們知道,在Python里面比較數(shù)字/字符串是否相等,那2個(gè)對(duì)象是否相等。其實(shí)也是可以比較的。這一切都要?dú)w功于__eq__這個(gè)方法。

我們編寫(xiě)__op__方法

可以看到有個(gè)向上的箭頭,這個(gè)代表子類重寫(xiě)了父類的方法。我們點(diǎn)擊一下:

可以看到跳轉(zhuǎn)到了object的定義,而Python的類都是繼承自object的,所以子類也就帶有了__eq__方法

在我們比較2個(gè)對(duì)象的時(shí)候: r == r2, 實(shí)際上是執(zhí)行了這樣的方法:

r.__eq__(r2)

不信咱們?cè)囋?

image

實(shí)現(xiàn)

熟悉了eq以后,我們問(wèn)題就迎刃而解了。我們只需要在eq方法里面寫(xiě)上對(duì)應(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)
image

擴(kuò)展

既然能夠比較對(duì)象是否相等,那能否比較對(duì)象大小呢?那就等大家自己探索了,關(guān)鍵字:

lt, gt, ge, le

另外,還有__str__, __repr__, __hash__等方法,大家感興趣也可以自己重寫(xiě)著玩玩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、匯聚層的基本功能是: ①匯接接入層的用戶流量,進(jìn)行數(shù)據(jù)分組傳輸?shù)膮R聚、轉(zhuǎn)發(fā)與交換; ②根據(jù)接入層的用戶流量,進(jìn)...
    零九的小世界閱讀 2,122評(píng)論 0 9
  • 使用 typeof bar === “object” 判斷 bar 是不是一個(gè)對(duì)象有神馬潛在的弊端?如何避免這種弊...
    Roselle_c閱讀 399評(píng)論 0 0
  • Mysql概述 數(shù)據(jù)庫(kù)是一個(gè)易于訪問(wèn)和修改的信息集合。它允許使用事務(wù)來(lái)確保數(shù)據(jù)的安全性和一致性,并能快速處理百萬(wàn)條...
    彥幀閱讀 13,973評(píng)論 10 460
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂(lè)有人憂愁,有人驚喜有人失落,有的覺(jué)得收獲滿滿有...
    陌忘宇閱讀 8,889評(píng)論 28 54
  • 首先介紹下自己的背景: 我11年左右入市到現(xiàn)在,也差不多有4年時(shí)間,看過(guò)一些關(guān)于股票投資的書(shū)籍,對(duì)于巴菲特等股神的...
    瞎投資閱讀 5,966評(píng)論 3 8

友情鏈接更多精彩內(nèi)容