2012-09-07 38 views
0

在python中,我試圖通過一個對象wo(用戶定義)和wo.obj進行集成,而另一個用戶定義的對象我該如何告訴它是一個類的實例而不是普通的數據類型?如何區分一個類的實例和普通數據類型int/bool/float/etc

type(wo.obj) 
<class '__main__.test'> 

type(wo.obj) is types.InstanceType 
False 

type(wo.obj) is types.ClassType 
False 
+3

爲什麼你需要這樣做? –

+1

Python原語也是類的實例。一切都是一個對象。 – geoffspear

+1

與類的實例不同,沒有像普通數據類型那樣的東西。有一些「內建」類型,但它們幾乎是每個詞的意義上的對象,並區分它們幾乎從來沒有意義。無論你想要解決什麼問題,這都是一個完全錯誤的方法。刪除此問題並詢問有關* actual *問題的問題。 (參見[XY問題](http://meta.stackexchange.com/q/66377)) – delnan

回答

3

要檢查實例是否是在一個特定的類,你可以使用isinstance:

mc = MyClass() 
isinstance(mc, MyClass) # True 

注意:這對於子類是正確的,還有一些其他的怪癖,參見this answer對類似的問題。

如果你只是檢查type你會看到結果是<type 'instance'>無論哪個「用戶定義」類它是一個實例。

type(notmc).__name__ == 'instance' #True 

我懷疑這應該有某種形式的健康警示,如檢查類是否是實例類型似乎不是一個非常密集的檢查。

+0

如果我想要更通用的東西,我想知道它是否是任何類的實例,該怎麼辦?我定義了許多不同的類。檢查他們每一個可以是少數。 – LZOO

+0

因爲所有數據類型都是某種類型的對象,所以最好只檢查它是否是int/float/str/etc並將其消除。謝謝你的回答:> – LZOO

+0

@LZOO讓它不那麼厚顏無恥,希望它有所幫助。 –

相關問題