2014-02-21 125 views
1

我有多個類,所有從一個單一的基類繼承,這裏是一個簡單的例子:確定Python類類型與繼承類

class DataSource(object): 
    pass 
class TableDataSource(DataSource): 
    pass 

如果我想,以確定是否這些類類型的DataSource ,我想我可以做到以下幾點:

>>> tdl = TableDataSource() 
>>> print tdl is DataSource 
False 

所以我回來這裏假的,我怎麼能檢查所有我的課,從數據源繼承的數據源類型的對象,而不必檢查每個類類型特別?這將使檢查對象類型更容易在其他功能。

謝謝。

回答

5

is的事情是,它是測試如果兩個對象引用相同的事情。 DataSource該類是一個對象。因此,只有引用DataSource本身的東西纔會比較真實。你應該使用的是isinstance這樣的:

isinstance(x, DataSource) 
+0

謝謝,你的工作就像一個魅力。 –

4

使用isinstance

>>> tdl = TableDataSource() 
>>> isinstance(tdl, DataSource) 
True 

對於類使用issubclass

>>> issubclass(TableDataSource, DataSource) 
True 
+0

這個答案也適用,謝謝你,但有人首先打你! –

+0

@ josh1234令人震驚的是,時間戳完全相同。 :) –