问题:Python中type与isinstance方法的区别
在Python中,我们使用type和isinstance来测试和判断数据类型,其中type用于获取对象的类型,其返回值是对象的类型;isinstance用于测试对象是否是某种类型,返回True或False
区别
① 目的不同,type主要用于返回对象的类型,isinstance用于判断对象是否是指定类型
② 返回值不同,type返回类型,isinstance返回True或False
a = 12
b = 1.2
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
if type(a) == int:
print('int')
print(isinstance(a, int)) # True
print(isinstance(a, float)) # False
print(isinstance(a, (int, float))) # True
print(isinstance(b, (int, float))) # True
③ type不能判断子类对象是否属于父类,而isinstance可以
# 父类
class Father:
pass
# 子类
class Son(Father):
pass
if __name__ == '__main__':
son = Son()
print(type(son)) # <class '__main__.Son'>
print(isinstance(son, Son)) # True
print(isinstance(son, Father)) # True
print(isinstance(son, object)) # True
1. isinstance()用来判断一个实例对象是不是指定的类型,结果返回True或False,type()用来返回指定对象的数据类型
可理解为isinstance()函数只能判断变量是否属于某个已知的类型,不能直接得到变量所属的类型
2. type()不会认为子类是一种父类类型,不考虑继承关系,isinstance()会认为子类是一种父类类型,考虑继承关系
如果要判断两个类型是否相同推荐使用isinstance()
# 父类
class A:
pass
# 子类
class B(A):
pass
isinstance(A(),A) # True
type(A()) == A # True
isinstance(B(),A) # True
type(B()) == A # False
从上面的代码可以看出,isinstance()可以判断子类实例对象是属于父类的,而type()会判断子类实例对象和父类类型不一样