python的富比較方法
"""python的富比較方法包括__lt__、__gt__、__le__、__ge__、__eq__和__ne__六個方法,
分別表示:小於、大於、小於等於、大於等於、等於和不等於,對應的操作運算子為:<、>、<=、>=、==和!=。那麼是否象普通數字運算一樣,
這些符號之間存在關聯關係呢?如「小於等於」是否就包含了「小於」?比較符號之間有必須的包含關係嗎?本次對富比較方法__eq__和__ne__之間的關係進行分析:
python建議__eq__和__ne__之間是非的關係(就是互斥,取反,逆運算的關係),__ne__的方法實現時就應該呼叫__eq__取反來完成,
但如果開發者不遵循該要求實際上也是可以的。
案例分析:
1、如果開發者pyhon在自定義類中實現了__eq__和__ne__這兩個方法,則「==」和「!=」的兩個物件比較分別呼叫了這兩個方法進行比較。**如下:
"""class
car():
def__init__
(self, carname, oilcp100km, price):
self.carname, self.oilcp100km, self.price =carname, oilcp100km, price
def__eq__
(self, other):
"""就是判等運算
"""print("
execute __eq__")
return self.price ==other.price
def__ne__
(self, other):
"""就是不相等判斷
"""print("
execute __ne__")
return self.price !=other.price
car1, car2, car3, car4 = car('
愛麗舍', 8, 10), car(
'凱美瑞
', 7, 27), car('
愛麗舍', 8, 10), car('
途觀', 12, 27)
cc = car1 ==car2
(cc)
cc1 = car1 !=car2
(cc1)
cc2 = car2 ==car4
(cc2)
"""輸出結果:
execute __eq__
false
execute __ne__
true
execute __eq__
true
""""""
2、如果開發者pyhon在自定義類中實現了__eq__方法,未實現__ne__方法,則「==」和「!=」都是__eq__方法,
呼叫的兩個物件比較都呼叫__eq__方法進行比較,不過後者是對__eq__取反。**如下:
"""print("
---------------------------")
class
car():
def__init__
(self, carname, oilcp100km, price):
self.carname, self.oilcp100km, self.price =carname, oilcp100km, price
def__eq__
(self, other):
"""就是判等運算
"""print("
execute __eq__")
return self.price ==other.price
car1, car2, car3, car4 = car('
愛麗舍', 8, 10), car(
'凱美瑞
', 7, 27), car('
愛麗舍', 8, 10), car('
途觀', 12, 27)
cc = car1 ==car2
(cc)
cc1 = car1 != car4 #
不過後者是對__eq__取反,實現的效果和__ne__是一樣的(ne:就是 not equal 的縮寫)
(cc1)
"""3、如果開發者pyhon在自定義類中實現了__ne__方法,未實現__eq__方法,則「!=」呼叫__ne__方法,而eq則呼叫系統內建的「==」對應的方法,
老猿初步分析應該是呼叫「is」,還沒求證。**如下:
"""print("
************************")
class
car():
def__init__
(self, carname, oilcp100km, price):
self.carname, self.oilcp100km, self.price =carname, oilcp100km, price
def__ne__
(self, other):
"""僅實現了不等
"""print("
execute __ne__")
return self.price !=other.price
car1, car2, car3, car4 = car('
愛麗舍', 8, 10), car(
'凱美瑞
', 7, 27), car('
愛麗舍', 8, 10), car('
途觀', 12, 27)
cc = car1 == car3 #
判斷相等,會去呼叫系統內建的"=="對應的方法,不是判等,是判斷 id 是否一致的 is 機制
(cc)
cc1 = car1 != car3 #
相等成立,不等取反為false
print(cc1)
Python的富比較方法 lt gt
python的富比較方法包括 lt gt 分別表示 小於 大於,對應的操作運算子為 那麼是否象普通數字運算一樣,這兩個方法之間存在互反的關係呢?python沒有對 lt gt 這兩個方法之間有什麼強制關係,但建議 lt 和 gt 為互反,開發者完全可以根據業務邏輯的需要自己定義。我們來進行分析驗證 ...
Python的富比較方法 le ge
python的富比較方法包括 le ge 分別表示 小於等於 大於等於,對應的操作運算子為 那麼是否象普通數字運算一樣,這兩個方法之間存在互反的關係呢?python沒有對 le ge 這兩個方法之間有什麼強制關係,但建議 le 和 ge 為互反,開發者完全可以根據業務邏輯的需要自己定義。我們來進行分...
python3的富比較方法
突然,在想為什麼兩個物件可以比較大小呢?比如類的兩個例項,這就不得不說python3中的富比較方法了。拿python3中的functools中的cmp to key函式作為例子。下面是該函式的源 def cmp to key mycmp convert a cmp function into a k...