__lt__ 而不是 __cmp__

| | | | | | |

Python 2.x 有兩種重載比較運算符的方法,__cmp__ 或“豐富的比較運算符”,例如 __lt__據說富比較重載是首選,但為什麼會這樣?

富比較運算符每個都更容易實現,但您必須以幾乎相同的邏輯實現其中幾個.但是,如果您可以使用內置的 cmp 和元組排序,那麼 __cmp__ 會變得非常簡單並滿足所有比較:

class A (object): def __init__(self, name, age, other): self.name = name self.age = age self.other = other def __cmp__(self, other): assert isinstance(other, A) # 假設例子 return cmp((self.name, self.age, self.other), (other.name, other.age, other.other)) 

這種簡潔好像滿足了我的需求比重載所有 6(!)的豐富比較要好得多。 (但是,如果您依賴“交換的論點”/反映的行為,您可以將其降至“僅”4,但在我看來,這會導致並發症的淨增加。)

< strong>如果我只重載 __cmp__ 是否有任何不可預見的陷阱需要注意?

我了解 < , <=, == 等運算符可以被重載用於其他目的,並且可以返回任何他們喜歡的對象。我不是在問這種方法的優點,而只是在使用這些運算符進行比較時的差異,就像它們對數字的意義一樣。

更新: As Christopher 指出cmp正在消失在 3.x 中。 是否有任何替代方法可以像上面的 __cmp__ 一樣簡單地實現比較?

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method