python判断类型之type和isinstance对比

【摘要】

本文主要介绍python2.7中在判断数据类型时常用的type和isinstance的一些区别。以及在各种场景中的使用。

【正文】

一 type介绍

1.1 官方文档说明

python2.7关于type官方文档描述

翻译:type有两种使用方式。第一种是传入一个参数时,返回传入对象的类型对应的type类对象。这样可以获取到传入对象的类,但是如果是判断一个对象的所属类型,更推荐用内置的isinstance方法。下边一段是说利用type动态生成类,三个参数依次是类名(str),父类(tuple), 成员(dict)。不再赘述。

1.2 常规使用

  `a = 1`

  `print type(a)      # 输出<type ‘int’>`

  `import types`

  `print type(a) == types.IntType    # 输出True`

  `print type(a) == type(1)       # 输出True

1.3 判断自定义类

class Test1():
   pass


class Test2():
    pass

class Tets3(int):
    pass


class Test(4):
    pass
 

test1 = Test1()
test2 = Test2()
test3 = Test3()
test4 = Test4()        
print type(test1)       # 输出 <class ‘main.Test1’>
print type(test2)       # 输出 <class ‘main.Test2’>
print type(test3)       # 输出 <class ‘main.Test3’>
print type(test4)       # 输出 <class ‘main.Test4’>
print type(test1) == type(test2)    # 输出True
print type(test3) == type(12)      # 输出False
print type(Test4)
print type(test4) == types.IntType   # 输出False
print type(test4) == type(12)      # 输出False

注意:

  • Test3是继承自Int,test3是Test3的实例,属于Test3类,也应该属于Int类。但是这里判断不是int类。type在判断类型时不会考虑继承关系。

  • test1和test2一个属于Test1类,一个属于Test2类,实际上是不同类型,type判断结果是同一类型。自定义类属于经典类时,type均会得到<type ‘isinstance’>

二 isinstance介绍

2.1 官方文档说明

python2.7官方文档描述

翻译:isinstance(object, classinfo)。当object是classinfo或者其子类的一个实例/对象时返回True;当如果Object不是一个类的实例或者不是给出类型的对象就会返回False;当classinfo是一个元组时,只要元组中任意一个元素是object所属的类型或父类,都会返回True;如果传入的classinfo不是一个间接/直接类名、基本类型,或者由它们组成的元组,就会报一个TypeError异常。

2.2 常规使用

基本用法和type相似。基本类型取值可以是int float bool complex str list dict set tuple

print isinstance(1, int)   # 返回True 这里是根据内置类型判断

对上面的实例使用isinstance操作:

print isinstance(test3, int)     # 输出True 可以根据继承判断

print isinstance(test1, Test1)    # 输出True

print isinstance(test1, Test2)    # 输出False

三 总结

  • python2.7中,对于经典类的实例,type得到的结果都是<type ‘instance‘>。对于新式类,会得到

    <class ‘main.Test1’>

  • python3中全部是新式类,就不存在这个情况。全部得到结果 <class ‘main.Test1’>

  • type判断类型时,只能判断当前类,不考虑继承关系。

  • isinstance判断类型时,会考虑继承关系。

  • 官方推荐判断类型时,使用isinstance

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值