python判断变量类型时,为什么不推荐使用type方法
发布网友
发布时间:2022-04-23 08:59
我来回答
共3个回答
热心网友
时间:2022-04-18 03:05
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
热心网友
时间:2022-04-18 04:23
应该是和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
热心网友
时间:2022-04-18 05:57
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)来判断。