Python實用小知識之對象間的比較
前言
今天就結合日常生活的例子,給大傢講講Python對象之間的比較。(內容不多,小娃兒都能看懂)
場景
米洛今年國慶節打算給新傢添置一些日用的東西,比如床、四件套等等。為此,他使用瞭各大電商平臺的app,但因為是新傢,所以有些app還沒有錄入地址。
於是他幹脆進行瞭一波整理,在他的收貨地址裡面,找尋自己是否添加過最新的地址。
我們都知道,收貨地址最重要的就是地址+電話瞭,通過這個可以確定一個人。因為有些英雄美女喜歡把姓名寫成: 喵星人,吳彥祖這樣的,所以隻要確保地址和電話對得上就行。
那我們就需要比較地址是否有重復的,這樣就好好管理自己的收貨地址嘛。
代碼裡的收貨地址
我們定義一個Receiver類,裡面有name/address/mobile3個字段:
class Receiver(object): def __init__(self, name, addr, mobile): self.name = name self.addr = addr self.mobile = mobile if __name__ == "__main__": r = Receiver("小孟", "梅苑小區", 13922222222) r2 = Receiver("小孟貨", "梅苑小區", 13922222222) print(r == r2)
這樣我們的生活就映射到瞭代碼之中。由於我們要比較,所以我們這邊new瞭2個收貨地址。
我們想要的是,當addr和mobile一致的時候,我們確定這2個收貨地址相同。
來看看執行效果:
因為r和r2是2個不同的對象,所以他們是肯定不相等的。
思考: 如果是單例模式的class,r等於r2嗎?
瞭解__eq__方法
我們知道,在Python裡面比較數字/字符串是否相等,那2個對象是否相等。其實也是可以比較的。這一切都要歸功於__eq__
這個方法。
可以看到有個向上的箭頭,這個代表子類重寫瞭父類的方法。我們點擊一下:
在我們比較2個對象的時候: r == r2
, 實際上是執行瞭這樣的方法:
不信咱們試試:
實現
熟悉瞭__eq__以後,我們問題就迎刃而解瞭。我們隻需要在__eq__方法裡面寫上對應的判斷方法即可。
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("小孟", "梅苑小區", 13922222222) r2 = Receiver("小孟", "梅苑小區", 13922222222) print(r == r2)
擴展
既然能夠比較對象是否相等,那能否比較對象大小呢?那就等大傢自己探索瞭,關鍵字:
lt, gt, ge, le
另外,還有__str__
, __repr__
, __hash__
等方法,大傢感興趣也可以自己重寫著玩玩。
總結
到此這篇關於Python實用小知識之對象間比較的文章就介紹到這瞭,更多相關Python對象的比較內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python 特殊屬性及方法詳細解析
- 一文帶你瞭解Python中的雙下方法
- Python print函數:如何將對象打印輸出
- python區塊鏈簡易版交易實現示例
- Python面向對象三大特征 封裝、繼承、多態