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

第8.22節 Python案例詳解:重寫 “富比較”方法控制比較邏輯

系統 1962 0

一、 案例說明
本節定義一個小汽車的類Car,類中包括車名carname、百公里油耗oilcostper100km、價格price三個屬性。然后實現 __lt__、__gt__、__le__、__ge__ 四個方法(這4個方法的用途請見上一節《第8.21節 Python中__lt__、__gt__等 “富比較”(“rich comparison”)方法用途探究》(https://blog.csdn.net/LaoYuanPython/article/details/95042104),為了說明問題,我們將__lt__與__le__的比較邏輯以及__gt__與__ge__的比較邏輯故意弄成了相反,同時重寫了__repr__方法以輸出格式化的詳細信息。然后我們定義兩個實例變量來進行大小比較,看執行效果。
二、 案例代碼

            
              >>> 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('愛麗舍',8,10),Car('凱美瑞',7,27)
>>> car1
                  
                    car2,car1>=car2
execute __lt__
execute __le__
execute __gt__
execute __ge__
(True, False, True, False)
>>>

                  
                
              
            
          

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

  1. 通過4個比較的輸出信息可以得知,<、<=、>、>=分別調用了 __lt__、__le__、__gt__、__ge__ 四個方法;
  2. 由于 __lt__、__le__ 使用price進行比較,且真正的比較表達式是相反的兩個邏輯,所以二者輸出結果也完全相反,同理__gt__、__ge__也是一樣,這說明Python自定義類的實例對象比較大小時,對象的大小判斷規則是由開發者自己定義的,并沒有要求“小于等于”就一定要包含“小于”,二者之間在實現時沒有邏輯關系,__gt__與__ge__也如此,同理__gt__與__lt__也無需是相反的結果,最終的邏輯應該根據業務需要進行重寫確認;
  3. 通過以上案例,我們也知道,通過重寫富比較方法,我們完全可以截獲對象比較邏輯的調用;
  4. 實際的富比較方法還有__eq__和__ne__,這兩個方法object類實現了,可以直接繼承使用,但也可以重寫。

本節參考資料:
1、《第8.21節 Python中__lt__、__gt__等 “富比較”(“rich comparison”)方法用途探究》;
2、《第8.15節 Python重寫自定義類的__repr__方法》

老猿Python,跟老猿學Python!
博客地址:https://blog.csdn.net/LaoYuanPython
請大家多多支持,點贊、評論和加關注!謝謝!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 长宁区| 潍坊市| 雷山县| 紫金县| 龙海市| 泾源县| 邯郸县| 长葛市| 正阳县| 安乡县| 洛阳市| 上饶市| 泗阳县| 二连浩特市| 永寿县| 阳新县| 高台县| 萍乡市| 五原县| 石渠县| 新建县| 威远县| 东城区| 惠东县| 和平区| 新绛县| 桐乡市| 岳阳市| 台东市| 张家口市| 北流市| 靖安县| 水富县| 江源县| 嘉兴市| 定兴县| 家居| 米林县| 吴堡县| 聊城市| 凌海市|