python-isinstance和type的用法和区别

在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的用法和区别的学习

推荐阅读更多精彩内容