type() 和 isinstance 都可以做类型的比较,但他们是有区别的,知道原理就能在应用场景中灵活应用。
请看下这个例子 .
class A:
pass
class B(A):
pass
b=B()
print(type(b) is A)
print(isinstance(b,A))
#打印的结果如下:
False
True
为什么两种方法得出不同的结果?
解释如下:
type() 得出的ID 地址,当用type(b)他得出的是B 的地址,
isinstance()这个在type 的基础上 ,进行网上找,就像一个链条 ,一个个网上找,直到 找不到为止 ,这就是明显的区别,显然 B 继承了A ,当然也可以认为A 类型。
class A:
pass
class B(A):
pass
b=B()
print(type(b) is A)
print(isinstance(b,A))
print((type(b) is B))# 结果为True
False
True
True