在python里面,我們經(jīng)常使用isinstance和type兩個(gè)內(nèi)置函數(shù)來判斷變量是否屬于某個(gè)內(nèi)建類型,但是我一直沒搞懂二者的區(qū)別,也不知道什么時(shí)候該用哪個(gè)比較好,今天系統(tǒng)學(xué)習(xí)了一下,總結(jié)如下:首先總結(jié)二者各自的用法,然后再總結(jié)二者的區(qū)別
一.isinstance
1.格式
isinstance(object,type-or-tuple-or-class) -> bool
2.作用
判斷一個(gè)對(duì)象是某個(gè)類或子類的實(shí)例。
3.參數(shù)介紹
第一個(gè)參數(shù)(object)為對(duì)象,第二個(gè)參數(shù)(type)為類型名(int...)或類型名的一個(gè)列表((int,list,float)是一個(gè)列表)。其返回值為布爾型(True or flase)。
具體的:
(1)當(dāng)?shù)诙€(gè)參數(shù)是type-or-tuple時(shí)
若第二個(gè)參數(shù)只有一個(gè)單獨(dú)的類型,對(duì)象的類型與參數(shù)二的類型相同則返回True;
若第二個(gè)參數(shù)為一個(gè)元組類型,則若對(duì)象類型與元組中類型名之一相同即返回True。
# coding=UTF-8
>>> a = 4
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list))#與元組類型之一相同
True
>>> isinstance(a,(str,list,float))#與元組類型都不相同
False
(2)當(dāng)?shù)诙€(gè)參數(shù)是class時(shí)
# coding=UTF-8
class A(object):
pass
>>>a=A()
>>>isinstance(a,A)
True
二.type
1.格式
type(object)--類型
2.作用
得到傳入的object的類型
三.比較
1.共同點(diǎn)
type和isinstance都可以判斷變量是否屬于某個(gè)內(nèi)建類型
2.不同點(diǎn)
(1)type只接收一個(gè)參數(shù),不但可以判斷變量是否屬于某個(gè)類型,而且可以得到參數(shù)變量未知的所屬的類型;而isinstance只能判斷是否屬于某個(gè)已知類型,不能直接得到變量未知的所屬的類型
# coding=UTF-8
class A(object):
pass
>>>a=A()
#type判斷變量是否屬于某個(gè)類型
>>>type(a)==A
True
#type得到變量類型
>>>type(a)
__main__.A
#isinstance只能判斷變量是否屬于某個(gè)類型
>>>isinstance(a,A)
True
(2)isinstance可以判斷子類實(shí)例對(duì)象是屬于父類的;而type會(huì)判斷子類實(shí)例對(duì)象和父類類型不一樣
# coding=UTF-8
class father(object):
pass
class son(father):
pass
>>>a=father()
>>>b=son()
>>>isinstance(a,father)
True
>>>type(a)==father
True
>>>isinstance(b,father)#isinstance得到子類實(shí)例是屬于父類的
True
>>>type(b)==father#type對(duì)于子類實(shí)例判斷不屬于父類
False
綜上所述,isinstance和type的應(yīng)用場(chǎng)景是不同的:
type主要用于獲取未知變量的類型
isinstance主要用于判斷A類是否繼承于B類
四.延伸知識(shí)點(diǎn)
需要注意一點(diǎn)的是:father類定義時(shí)必須是繼承object的,否則用type判斷父類實(shí)例是否屬于父類的結(jié)果是False
# coding=UTF-8
class father():
pass
class son(father):
pass
>>>a=father()
>>>b=son()
>>>isinstance(a,father)
True
>>>type(a)==father#注意到?jīng)]:type判斷父類實(shí)例是否屬于父類為Flase
False
>>>isinstance(b,father)
True
>>>type(b)==father
False
>>>type(a)
instance
出現(xiàn)上面的原因是由于class和class(object)的區(qū)別,具體的區(qū)別后面會(huì)在后面的文章里繼續(xù)討論
以上就是對(duì)于isinstance和type的用法和區(qū)別的學(xué)習(xí)