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

发布网友

我来回答

3个回答

热心网友

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

热心网友

应该是和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

热心网友

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)来判断。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com