python資料類型判斷type與isinstance的區別

高洛峰
發布: 2016-10-19 14:39:05
原創
1814 人瀏覽過

在專案中,我們會在每個介面驗證客戶端傳過來的參數類型,如果驗證不通過,傳回給客戶端「參​​數錯誤」錯誤碼。

這樣做不但便於調試,而且增加健壯性。因為客戶端是可以作弊的,不要輕易相信客戶傳過來的參數。

驗證型別type函數,非常好用,例如

>>type('foo') == str

True

>>type(2.3) in (int,float)

True了type()來判斷類型,為什麼還有isinstance()呢?

一個明顯的區別是在判斷子類別。

type()不會認為子類別是一種父類別。

isinstance()會認為子類別是一種父類別類型。

千言不如一碼。

class Foo(object):
    pass
    
class Bar(Foo):
    pass
    
print type(Foo()) == Foo
print type(Bar()) == Foo
print isinstance(Bar(),Foo)
   
class Foo(object):
    pass
   
class Bar(Foo):
    pass
   
print type(Foo()) == Foo
print type(Bar()) == Foo
print isinstance(Bar(),Foo)
输出
True
False
True
登入後複製

要注意的是,舊式類別跟新式類別的type()結果是不一樣的。舊式類別都是

class A:
    pass
    
class B:
    pass
    
class C(object):
    pass
    
print 'old style class',type(A())
print 'old style class',type(B())
print 'new style class',type(C())
print type(A()) == type(B())
   
class A:
    pass
   
class B:
    pass
   
class C(object):
    pass
   
print 'old style class',type(A())
print 'old style class',type(B())
print 'new style class',type(C())
print type(A()) == type(B())
输出
old style class <type &#39;instance&#39;>
old style class <type &#39;instance&#39;>
new style class <class &#39;__main__.C&#39;>
True
登入後複製
不存在說isinstance比type更好。只有哪個比較適合需求。
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板