一、 引言
《第8.21節(jié) Python中__lt__、gt__等 “富比較”(“rich comparison”)方法用途探究》和《第8.22節(jié) Python案例詳解:重寫 “富比較”方法控制比較邏輯》介紹了富比較方法及執(zhí)行比較操作與富比較的對應關系,本節(jié)將通過案例分析排序操作與富比較方法的對應關系。
二、 案例說明
復用上節(jié)定義的類Car(如果你沒看上節(jié)可以忽略這個背景,因為代碼是完整的),包括實例屬性和實例方法都保持不變,我們來(這4個方法的用途請見上一節(jié)《第8.21節(jié) Python中__lt、__gt__等 “富比較”(“rich comparison”)方法用途探究》,然后我們定義多個實例變量放到一個列表中來進行排序,看執(zhí)行效果。
為了分析,我們定義多個實例變量放到一個列表中,調用列表的排序方法sort來對列表進行排序,當然也可以調用sorted函數進行排序,二者大部分功能是一樣的,但略有區(qū)別,在此就不展開講了,老猿考慮開單章專門介紹。
三、 代碼
>>> class Car():def __init__(self,carname,oilcper100km, price):self.carname,self.oilcper100km,self.price = carname,oilcper100km, pricedef __lt__(self,other): print("execute __lt__")return self.price<other.pricedef __le__(self,other):print("execute __le__")return self.price>other.pricedef __gt__(self,other):print("execute __gt__")return self.oilcper100km>other.oilcper100kmdef __ge__(self,other):print("execute __ge__")return self.oilcper100km<other.oilcper100kmdef __repr__(self): #return f"('{self.carname}',{self.oilcper100km},{self.price})"return str(self.__dict__)>>> car1,car2,car3 = Car('愛麗舍',8,10),Car('凱美瑞',7,27),Car('科帕奇',12,23)
>>> cars=[car1,car2,car3]
>>> cars
[{'carname': '愛麗舍', 'oilcper100km': 8, 'price': 10}, {'carname': '凱美瑞', 'oilcper100km': 7, 'price': 27}, {'carname': '科帕奇', 'oilcper100km': 12, 'price': 23}]
>>> cars.sort()
execute __lt__
execute __lt__
execute __lt__
execute __lt__
>>> cars
[{'carname': '愛麗舍', 'oilcper100km': 8, 'price': 10}, {'carname': '科帕奇', 'oilcper100km': 12, 'price': 23}, {'carname': '凱美瑞', 'oilcper100km': 7, 'price': 27}]
>>>
四、 案例截屏
五、 案例分析
sort排序時執(zhí)行了四次__lt__方法調用,沒有執(zhí)行其他富比較方法,因此sort排序默認調用的富比較方法是__lt__方法;sort排序時改變了cars中的元素順序,確保了列表中的元素是按__lt__方法指定的排序屬性price進行排序的;本節(jié)的__repr__方法實現代碼與上節(jié)有所不同,這個應該是__repr__方法快速實現的一種方案,且符合Python對__repr__方法的要求。本節(jié)參考資料:
1、《第8.21節(jié) Python中__lt__、__gt__等 “富比較”(“rich comparison”)方法用途探究》;
2、《第8.15節(jié) Python重寫自定義類的__repr__方法》
老猿Python,跟老猿學Python!
博客地址:https://blog.csdn.net/LaoYuanPython
請大家多多支持,點贊、評論和加關注!謝謝!
轉載于:https://www.cnblogs.com/LaoYuanPython/p/11166827.html
總結
以上是生活随笔為你收集整理的第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。