日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

第8.22節(jié) Python案例詳解:重寫(xiě) “富比較”方法控制比較邏輯

系統(tǒng) 2088 0

一、 案例說(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)
>>>

                  
                
              
            
          

三、 案例截屏 第8.22節(jié) Python案例詳解:重寫(xiě) “富比較”方法控制比較邏輯_第1張圖片
四、 案例分析

  1. 通過(guò)4個(gè)比較的輸出信息可以得知,<、<=、>、>=分別調(diào)用了 __lt__、__le__、__gt__、__ge__ 四個(gè)方法;
  2. 由于 __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);
  3. 通過(guò)以上案例,我們也知道,通過(guò)重寫(xiě)富比較方法,我們完全可以截獲對(duì)象比較邏輯的調(diào)用;
  4. 實(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ì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 杂多县| 石屏县| 江永县| 台北市| 扎赉特旗| 绥江县| 九龙城区| 哈尔滨市| 谢通门县| 江津市| 胶州市| 怀集县| 海门市| 任丘市| 荔浦县| 云龙县| 林西县| 盐城市| 宝鸡市| 佛坪县| 儋州市| 台东县| 广德县| 岑巩县| 山东| 武川县| 灵寿县| 旌德县| 江阴市| 宝应县| 新民市| 当涂县| 德惠市| 太湖县| 乌拉特中旗| 京山县| 安康市| 九江县| 兴海县| 梨树县| 宝兴县|