2009-07-24 61 views
4

首先代碼:Python中比較不同類型

class myClass(object): 
    def __cmp__(self, other): 
     return cmp(type(self), type(other)) or cmp(self.__something, other.__something) 

這是否產生同樣的排序爲其他類型的蟒蛇?這是否有一個正確的成語 ?

Related question:

對谷歌四處望了一下,我發現在一些python docs相關信息。引用:

實現注意事項:除了數字 不同類型的的對象 通過它們的類型名稱排序;對象 相同類型不支持 正確的比較是按其 地址排序。

這表明,如果我要遵循的行爲,我應該用

class myClass(object): 
    def __cmp__(self, other): 
     return (cmp(self.__class__.__name__, other.__class__.__name) or 
       cmp(self.__something, other.__something)) 

尤其不幸的是,我可能有一個非常困難的時期mantaining傳遞與dict s,這是一個特殊的情況下,我本來希望落實的。

我甚至需要檢查我的參數類型嗎? python甚至讓我看到這個?

+0

你能否詳細說明這個問題。 '你的意思是'產生與python中其他類型相同的順序'? – 2009-07-24 03:46:06

回答

1

不幸的是,Python 2支持這種「外來」比較(幸運的是在Python 3中被廢止)。模擬內建行爲並不容易,因爲它有很多特殊情況,例如float和int直接比較(沒有類型比較覆蓋,因爲它有編碼),但是複雜的進行任何比較(==和!=除外)總是提出一個例外。 真的需要模擬所有這些怪癖和扭動嗎?這種需求將非常不尋常。如果你的類型是「數字」(例如查看decimal.Decimal),我認爲它需要和其他數值類型一起使用,但是不是「可比數字」的類型具有較少的實際字面限制。

0

你究竟在做什麼?爲什麼要按類/類型對不同類的實例進行排序或比較?

當您尚未實際發佈問題時,很難提出解決方案。

您需要爲自定義類定義自己的比較方法,並且主要由您來確保您執行的任何比較都有意義。

請解釋你想達到的目標。這可能不是Pythonic的方式。