python3的富比較方法

2021-09-27 08:51:24 字數 2720 閱讀 2931

突然,在想為什麼兩個物件可以比較大小呢?比如類的兩個例項,這就不得不說python3中的富比較方法了。

拿python3中的functools中的cmp_to_key函式作為例子。下面是該函式的源**:

def

cmp_to_key

(mycmp)

:"""convert a cmp= function into a key= function"""

classk(

object):

__slots__ =

['obj'

]def

__init__

(self, obj)

: self.obj = obj

def__lt__

(self, other)

:return mycmp(self.obj, other.obj)

<

0def

__gt__

(self, other)

:return mycmp(self.obj, other.obj)

>

0def

__eq__

(self, other)

:return mycmp(self.obj, other.obj)==0

def__le__

(self, other)

:return mycmp(self.obj, other.obj)

<=

0def

__ge__

(self, other)

:return mycmp(self.obj, other.obj)

>=

0 __hash__ =

none

return k

該函式內部定義了乙個類,該類有5個方法,分別是__lt__, __gt__,__eq__,__le__,__ge__其實還可以定義__ne__方法。

這分別對應了:小於,大於,等於,小於等於,大於等於,不等於。這六個就是富比較方法。

物件之所以能夠比較大小,就是因為這六個富比較方法在其作用。例如,__lt__富比較方法可以直接對映到對應的操作符如「<」,操作更方便簡潔。

舉個例子來講吧:

#@author: sjl

#@creaetd: 2019/09/23

#@updated: 2019/09/23

#@desc: 實驗python中的富比較方法,__lt__, __gt__, __le__, __ge__, __eq__, __ne__這6個富比較方法

class

test

(object):

def__init__

(self, value)

: self.value = value

def__lt__

(self, other)

:print

('呼叫test的__lt__方法'

)return self.value < other.value

def__gt__

(self, other)

:print

('呼叫test的__gt__方法'

)return self.value > other.value

t1 = test(1)

t2 = test(2)

print

(t1 > t2)

print

(t2 < t1)

# 當比較兩個例項t1和t2的大小時,實際就是呼叫了對應的富比較方法。

# 例子中時t1 > t2,應該對映到了test_1類中的__gt__方法,也就是比較了這兩個例項的value屬性的大小。

輸出結果如下:

呼叫test的__gt__方法

false

呼叫test的__lt__方法

false

將**修改之後:

class

test

(object):

def__init__

(self, value)

: self.value = value

def__lt__

(self, other)

:print

('呼叫test的__lt__方法'

)return self.value < other.value

def__gt__

(self, other)

:print

('呼叫test的__gt__方法'

)return self.value*

10> other.value

t1 = test(1)

t2 = test(2)

print

(t1 > t2)

print

(t2 < t1)

輸出結果如下:

呼叫test的__gt__方法

true

呼叫test的__lt__方法

false

[1] python的富比較方法__eq__和__ne__之間的關聯關係分析

[2] 為什麼python中稱__lt__、__gt__等為「富比較」方法

Python的富比較方法

python的富比較方法 python的富比較方法包括 lt gt le ge eq 和 ne 六個方法,分別表示 小於 大於 小於等於 大於等於 等於和不等於,對應的操作運算子為 和 那麼是否象普通數字運算一樣,這些符號之間存在關聯關係呢?如 小於等於 是否就包含了 小於 比較符號之間有必須的包含...

Python的富比較方法 lt gt

python的富比較方法包括 lt gt 分別表示 小於 大於,對應的操作運算子為 那麼是否象普通數字運算一樣,這兩個方法之間存在互反的關係呢?python沒有對 lt gt 這兩個方法之間有什麼強制關係,但建議 lt 和 gt 為互反,開發者完全可以根據業務邏輯的需要自己定義。我們來進行分析驗證 ...

Python的富比較方法 le ge

python的富比較方法包括 le ge 分別表示 小於等於 大於等於,對應的操作運算子為 那麼是否象普通數字運算一樣,這兩個方法之間存在互反的關係呢?python沒有對 le ge 這兩個方法之間有什麼強制關係,但建議 le 和 ge 為互反,開發者完全可以根據業務邏輯的需要自己定義。我們來進行分...