在python里面,我们经常使用isinstance和type两个内置函数来判断变量是否属于某个内建类型,但是我一直没搞懂二者的区别,也不知道什么时候该用哪个比较好,今天系统学习了一下,总结如下:首先总结二者各自的用法,然后再总结二者的区别
一.isinstance
1.格式
isinstance(object,type-or-tuple-or-class) -> bool
2.作用
判断一个对象是某个类或子类的实例。
3.参数介绍
第一个参数(object)为对象,第二个参数(type)为类型名(int...)或类型名的一个列表((int,list,float)是一个列表)。其返回值为布尔型(True or flase)。
具体的:
(1)当第二个参数是type-or-tuple时
若第二个参数只有一个单独的类型,对象的类型与参数二的类型相同则返回True;
若第二个参数为一个元组类型,则若对象类型与元组中类型名之一相同即返回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)当第二个参数是class时
# coding=UTF-8
class A(object):
pass
>>>a=A()
>>>isinstance(a,A)
True
二.type
1.格式
type(object)--类型
2.作用
得到传入的object的类型
三.比较
1.共同点
type和isinstance都可以判断变量是否属于某个内建类型
2.不同点
(1)type只接收一个参数,不但可以判断变量是否属于某个类型,而且可以得到参数变量未知的所属的类型;而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判断父类实例是否属于父类的结果是False
# coding=UTF-8
class father():
pass
class son(father):
pass
>>>a=father()
>>>b=son()
>>>isinstance(a,father)
True
>>>type(a)==father#注意到没:type判断父类实例是否属于父类为Flase
False
>>>isinstance(b,father)
True
>>>type(b)==father
False
>>>type(a)
instance
出现上面的原因是由于class和class(object)的区别,具体的区别后面会在后面的文章里继续讨论
以上就是对于isinstance和type的用法和区别的学习