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