class A:passclass B(A)passb=B()#isinstance可以进行继承关系的判断
print(isinstance(b,B))#Trueprint(isinstance(b,A))#Trueprint(type(b) is B)#Trueprint(type(b) is A)#Falseprint(type(b),A,B,b)#<class '__main__.B'> <class '__main__.A'> <class '__main__.B'> <__main__.B object at 0x7fda94285810>
#type判断类之间的引用地址是否相等,不判断继承关系
在 Python 中,isinstance
和 type
都用于检查对象的类型,但它们有一些区别和联系。
区别:
-
type
函数直接返回对象的类型。例如,如果obj
是一个对象,type(obj)
会返回该对象的确切类型。 -
isinstance
函数用于检查一个对象是否是某个类或由某个类派生出来的类的实例。它可以接受一个对象和一个类(或者由多个类组成的元组)作为参数。
例如,如果 obj
是一个对象,class_
是一个类,isinstance(obj, class_)
会返回一个布尔值,表示 obj
是否是 class_
的实例或者是 class_
的子类的实例。
联系:
-
它们都与对象的类型信息有关,用于在编程中确定对象的类型特征。
-
如果
isinstance(obj, type(obj))
,通常会返回True
,因为一个对象肯定是它自身实际类型的实例。
下面通过一些例子来更清楚地展示它们的区别:
class Parent:passclass Child(Parent):passobj1 = Parent()
obj2 = Child()# type 直接返回对象的确切类型
print(type(obj1))
print(type(obj2)) # isinstance 检查对象是否是指定类或其派生类的实例
print(isinstance(obj1, Parent))
print(isinstance(obj2, Parent))
print(isinstance(obj2, Child))