一、 案例說(shuō)明
本節(jié)定義一個(gè)小汽車(chē)的類(lèi)Car,類(lèi)中包括車(chē)名carname、百公里油耗oilcostper100km、價(jià)格price三個(gè)屬性。然后實(shí)現(xiàn)
__lt__、__gt__、__le__、__ge__
四個(gè)方法(這4個(gè)方法的用途請(qǐng)見(jiàn)上一節(jié)《第8.21節(jié) Python中__lt__、__gt__等 “富比較”(“rich comparison”)方法用途探究》(https://blog.csdn.net/LaoYuanPython/article/details/95042104),為了說(shuō)明問(wèn)題,我們將__lt__與__le__的比較邏輯以及__gt__與__ge__的比較邏輯故意弄成了相反,同時(shí)重寫(xiě)了__repr__方法以輸出格式化的詳細(xì)信息。然后我們定義兩個(gè)實(shí)例變量來(lái)進(jìn)行大小比較,看執(zhí)行效果。
二、 案例代碼
>>> class Car():
def __init__(self,carname,oilcostper100km, price):
self.carname,self.oilcostper100km,self.price = carname,oilcostper100km, price
def __lt__(self,other):
print("execute __lt__")
return self.price
other.price
def __gt__(self,other):
print("execute __gt__")
return self.oilcostper100km>other.oilcostper100km
def __ge__(self,other):
print("execute __ge__")
return self.oilcostper100km
>> car1,car2 = Car('愛(ài)麗舍',8,10),Car('凱美瑞',7,27)
>>> car1
car2,car1>=car2
execute __lt__
execute __le__
execute __gt__
execute __ge__
(True, False, True, False)
>>>
-
通過(guò)4個(gè)比較的輸出信息可以得知,<、<=、>、>=分別調(diào)用了
__lt__、__le__、__gt__、__ge__
四個(gè)方法; -
由于
__lt__、__le__
使用price進(jìn)行比較,且真正的比較表達(dá)式是相反的兩個(gè)邏輯,所以二者輸出結(jié)果也完全相反,同理__gt__、__ge__也是一樣,這說(shuō)明Python自定義類(lèi)的實(shí)例對(duì)象比較大小時(shí),對(duì)象的大小判斷規(guī)則是由開(kāi)發(fā)者自己定義的,并沒(méi)有要求“小于等于”就一定要包含“小于”,二者之間在實(shí)現(xiàn)時(shí)沒(méi)有邏輯關(guān)系,__gt__與__ge__也如此,同理__gt__與__lt__也無(wú)需是相反的結(jié)果,最終的邏輯應(yīng)該根據(jù)業(yè)務(wù)需要進(jìn)行重寫(xiě)確認(rèn); - 通過(guò)以上案例,我們也知道,通過(guò)重寫(xiě)富比較方法,我們完全可以截獲對(duì)象比較邏輯的調(diào)用;
- 實(shí)際的富比較方法還有__eq__和__ne__,這兩個(gè)方法object類(lèi)實(shí)現(xiàn)了,可以直接繼承使用,但也可以重寫(xiě)。
本節(jié)參考資料:
1、《第8.21節(jié) Python中__lt__、__gt__等 “富比較”(“rich comparison”)方法用途探究》;
2、《第8.15節(jié) Python重寫(xiě)自定義類(lèi)的__repr__方法》
老猿Python,跟老猿學(xué)Python!
博客地址:https://blog.csdn.net/LaoYuanPython
請(qǐng)大家多多支持,點(diǎn)贊、評(píng)論和加關(guān)注!謝謝!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
