python-isinstance和type的用法和區(qū)別

在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í)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,438評(píng)論 6 13
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,068評(píng)論 0 9
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評(píng)論 18 399
  • # 第一優(yōu)先級(jí)規(guī)則聲明: # 除了夢(mèng)境,每一個(gè)意識(shí)主進(jìn)程都必須與一個(gè)身體參與的機(jī)械進(jìn)程相匹配,否則結(jié)束意識(shí)主進(jìn)程。...
    李洞BarryLi閱讀 4,199評(píng)論 0 1
  • 今天,你義無反顧 今天,你躊躇滿志 今天,你再一次相信自己,你能行 改變,實(shí)屬不易,但也不算很難。 努力到無能為力...
    婁婁姐閱讀 487評(píng)論 1 1

友情鏈接更多精彩內(nèi)容