首頁  >  文章  >  後端開發  >  怎麼查看一個物件的類型

怎麼查看一個物件的類型

anonymity
anonymity原創
2019-05-25 15:10:484242瀏覽

在Python中有兩種類型判斷函數,type()和isinstance()。

怎麼查看一個物件的類型

使用type()

#首先,我們來判斷物件類型,使用type()函數:

#基本型別都可以用type()判斷:

>>> type(123)
<type &#39;int&#39;>
>>> type(&#39;str&#39;)
<type &#39;str&#39;>
>>> type(None)
<type &#39;NoneType&#39;>

如果一個變數指向函數或類,也可以用type()判斷:

>>> type(abs)
<type &#39;builtin_function_or_method&#39;>
>>> type(a)
<class &#39;__main__.Animal&#39;>

但是type()函數傳回的是什麼類型呢?它傳回type類型。

使用isinstance()

對class的繼承關係來說,使用type()就很不方便。我們要判斷class的類型,可以使用isinstance()函數。

我們回顧上次的例子,如果繼承關係是:

object -> Animal -> Dog -> Husky

那麼,isinstance()就可以告訴我們,一個物件是否是某種類型。先建立3種類型的物件:

>>> a = Animal()
>>> d = Dog()
>>> h = Husky()

然後,判斷:

>>> isinstance(h, Husky)
True

沒有問題,因為h變數指向的就是Husky物件。

再判斷:

>>> isinstance(h, Dog)
True

h雖然本身是Husky類型,但由於Husky是從Dog繼承下來的,所以,h也還是Dog類型。換句話說,isinstance()判斷的是一個物件是否是該類型本身,或位於該類型的父繼承鏈上。

因此,我們可以確信,h還是Animal類型:

>>> isinstance(h, Animal)
True

同理,實際類型是Dog的d也是Animal類型:

>>> isinstance(d, Dog) and isinstance(d, Animal)
True

但是,d不是Husky類型:

>>> isinstance(d, Husky)
False

能用type()判斷的基本型別也可以用isinstance()判斷:

>>> isinstance(&#39;a&#39;, str)
True
>>> isinstance(u&#39;a&#39;, unicode)
True
>>> isinstance(&#39;a&#39;, unicode)
False

並且還可以判斷一個變數是否是某些型別中的一種,例如下面的程式碼就可以判斷是否是str或unicode:

>>> isinstance(&#39;a&#39;, (str, unicode))
True
>>> isinstance(u&#39;a&#39;, (str, unicode))
True

由於str和unicode都是從basestring繼承下來的,所以,還可以把上面的程式碼簡化為:

>>> isinstance(u&#39;a&#39;, basestring)
True

#既然有了type()來判斷類型,為什麼還有isinstance()呢?一個明顯的差異是在判斷子類別。 type()不會認為子類別是一種父類別類型。 isinstance()會認為子類別是一種父類別類型。

以上是怎麼查看一個物件的類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn