1樓:ltoddy
有__eq__, __ne__, __lt__, __gt__等不麻煩的, 因為在functools庫中提供了乙個裝飾器:
total_ordering
你只需要實現 __eq__ 方法和其他任意乙個方法就可以了.
from
functools
import
total_ordering
@total_ordering
class
Point
:def
__init__
(self,x
,y):self.x
=xself.y
=ydef__eq__
(self
,other
):return
(self.x
,self.y
)==(other.x
,other.y
)def
__lt__
(self
,other
):return
(self.x
,self.y
)<(other.x
,other.y
)p1=Point(1
,4)p2
=Point(2
,3)for
exprin[
'p1 < p2'
,'p1 <= p2'
,'p1 == p2'
,'p1 >= p2'
,'p1 > p2'
(':'
.format
(expr
))result
=eval
(expr
(' result of {}: {}'
.format
(expr
,result
))因為通過`__eq__`和其他任意乙個方法就可以推導出來了.
2樓:劉遙行
題主說的是 __cmp__
,如果說的是可複寫方法部分,sort()確實複雜了一些,但我實力有限,無法給出更加架構才層次的答案(答主比較弱)本回答主要針對 cmp 方法
在做遷移的也遇到這個問題,首先看 python2 中 cmp 完成的功能
cmp(x,
y)ifx
>y:
return
1elif
x return-1 else :return 0從實現來說(只看函式本身的功能),可以用以下語句替代((x > y) - (x < y)) 參考:What's new in Python 3 3樓:copie 我也遇到了官方文件有說為什麼我總結了一下cmp取消後的應對方法https:// copie.cn/index.php/archives/Python3%E5%8F%96%E6%B6%88cmp%E7%9A%84%E6%9B%BF%E4%BB%A3%E6%96%B9%E6%B3%95-1. html Paco 今天在研究遷移到python3看到這個問題,key函式實現起來跟python2的cmp差不多啊.In 79 ss Out 79 1,2,333,8,234,5923,7,49 In 80 sss sorted ss,key functools.cmp to key lambda a,b i... 關心細節的魔鬼 據說ironpython可以做到 但是visual studiof的python外掛程式居然不直接支援ironpython,很詭異 北海若 using System using System.Collections.Generic using System.Linq using Sy... 依雲 因為乙個被賦值的物件是名字,另乙個是物件的資料。名字變更不影響物件本身 只影響你引用它的方法 而物件的資料變更當然會影響到那個物件,而不管那個物件有幾個名字,你又是通過哪個名字找到它的。再說一遍,這個和物件可變不可變沒任何關係。你嘗試修改可變物件的資料,結果會是成功的。如果你把 dict 換成...python3 為什麼取消了sort方法中的cmp引數?
C 如何呼叫python3?
python3中賦值問題?