python判断变量类型时,为什么不推荐使用type方法

如题所述

python 2.x:导入 types 模块,例如测试变量a数据类型是否为列表,则
type(a) is types.ListType # return True
type(a) is types.TupleType # False
------------------------------------------------------------------------------
Python 3.x:版本3中types模块已经被取消了,这些内置数据类型已经被基础类型的名字取代了。
type(a) is list # return True
type(a) is set # return False
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-04-16
应该是和instance()比吧,大部分情况都通过,只不过一些特殊的情况下有区别,对于subclass之类的 type就不行了
class A:
pass

class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False本回答被提问者采纳
第2个回答  2018-08-03
class A:
    pass
class B(A):
    pass
a=A()
b=B()
 
print('a is an A:%s;b is an A:%s'%(isinstance(a,A),isinstance(b,A)))
print('type of a is %s;type of b is %s'%(type(a),type(b)))

通常我们判断是什么类型,那么只是想直到这个对象是否含有我们所需要的方法或者属性,这样在调用的时候就不会出错,否则就要进行异常捕捉。而isinstance这个方法非常满足这个需求。以上是示例代码。

可以看出isinstance(a,A),isinstance(b,A)两个返回的都是True,如果我们把a,b都当做A的实例使用完全没问题,但是我们并不关心b是A的实例还是B的实例,因为他肯定包含A类定义中的所有属性和方法,正常调用不会出现异常。

type的话出来的则是一串字符串,精确到子类,所以可以用来做精确判断,例如判断是不是这个类,而不是这个类的子类,isinstance只能判断是不是这个类或者这个类的子类。

判断两个对象是否来自同一个类,可以用type(a)==type(b)来判断。

本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网