Python中type()和isinstance()用法的比較?

在判斷一個對象的類型的時候,我們可以使用type或者isinstance,那麼兩者有什麼區別呢?

如果Python類沒有繼承關係,那麼用type和isinstance都可以判斷一個對象的類型,但是當類有繼承關係存在的時候,要注意的是,type檢查的是對象的真正類型,而isinstance會將派生類判斷成基類類型。下面分別通過代碼加以說明。

Python中的type方法的用法

我們定義了一個基類Test1,和一個派生類Test2。 a為基類對象,b為派生類對象

class Test1 (object):
    pass
class Test2 (Test1):
    pass
a = Test1()
b = Test2()
type(a) is Test1
True
type(b) is Test2
True
type(b) is Test1
False

Python中的isinstance方法的用法

我們再來看isinstance,派生類對象b既是基類的instance,又是派生類的instance;反之則不是了,基類對像是基類的instance,但不是派生類的instance。這個其實比較好理解的:X是黃種人,當然也是人,反之X是人,但是不能說X就是黃種人:

isinstance(b, Test1)
True
isinstance(b, Test2)
True
isinstance(a, Test1)
True
isinstance(a, Test2)
False
isinstance([], list)
True
isinstance({}, dict)
True

此外isintance()的第二個參數接受tuple類型,只要滿足元組tuple中任意類型則返回True,你可以做如下判斷:

isinstance(a, (Test1, Test2, Test3))
True

Code問答 | CodeWenda.com

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

+ 60 = 63