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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,219评论 6 13
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,824评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • # 第一优先级规则声明: # 除了梦境,每一个意识主进程都必须与一个身体参与的机械进程相匹配,否则结束意识主进程。...
    李洞BarryLi阅读 3,929评论 0 1
  • 今天,你义无反顾 今天,你踌躇满志 今天,你再一次相信自己,你能行 改变,实属不易,但也不算很难。 努力到无能为力...
    娄娄姐阅读 444评论 1 1