我最感興趣的是發生了什麼,但讓我說我有一個自定義類__eq__實施,沒有別的。如果__lt__協議未實現,比較如何工作?
其他比較如何解決?什麼是默認行爲?每次運行比較時,我都會得到不同的結果。我知道我需要實現這些,我也可以使用@total_ordering
來簡化工作。
背後實際發生了什麼?這主要是出於好奇。
我最感興趣的是發生了什麼,但讓我說我有一個自定義類__eq__實施,沒有別的。如果__lt__協議未實現,比較如何工作?
其他比較如何解決?什麼是默認行爲?每次運行比較時,我都會得到不同的結果。我知道我需要實現這些,我也可以使用@total_ordering
來簡化工作。
背後實際發生了什麼?這主要是出於好奇。
如果沒有定義__lt__
,則比較使用__cmp__
代替。如果沒有定義,它使用默認比較器。而且看起來默認的比較器通過「對象標識(地址)」進行比較。
查看the docs for __cmp__
瞭解詳情。
從Python文檔的this部一些額外的信息:
不同類型的對象,除了不同的數值類型和不同的串類型,從未比較相等;這樣的對象排序一致但任意(排序異構數組產生一致的結果)。
CPython實現細節:除數字以外的不同類型的對象按其類型名排序;不支持正確比較的相同類型的對象按其地址排序。
鏈接到一些文檔? – myusuf3 2013-03-09 02:20:36
@ myusuf3:剛添加。 :) – cHao 2013-03-09 02:21:03