函数isinstance()

函数isinstance()

  函数isinstance()用来判断一个实例是否是指定类型的实例。
  函数isinstance()的签名如下:
isinstance(obj, class_or_tuple, /)
  其中obj为实例,class_or_tuple为类或者类组成的元组。如果实例是指定类型的实例,则返回True;否则,返回False。下面是一个简单的例子:

print('isinstance(10, int):', isinstance(10, int))
print('isinstance(10, str):', isinstance(10, str))

class A(object):
    pass

a = A()
print('isinstance(a, A):', isinstance(a, A))
print('isinstance(a, int):', isinstance(a, int))
print('isinstance(a, (int, A)):', isinstance(a, (int, A)))

  程序输出:

isinstance(10, int): True
isinstance(10, str): False
isinstance(a, A): True
isinstance(a, int): False
isinstance(a, (int, A)): True

isinstance VS type

  isinstance()的功能与type()是比较类似的:isinstance()是判断指定实例是否是指定类的实例;而type()是返回指定实例的类型。isinstance和type的区别是:isinstance()返回的是布尔类型的值(True或False),而type()返回的是类型;type()不考虑类的继承,而isinstance()考虑了类的继承。下面是一个简单的例子:

class A(object):
    pass

class B(A):
    pass

a = A()
b = B()

print('type(a):', type(a))
print('type(b):', type(b))

print('isinstance(a, A):', isinstance(a, A))
print('isinstance(a, B):', isinstance(a, B))
print('isinstance(b, B):', isinstance(b, B))
print('isinstance(b, A):', isinstance(b, A))

  程序输出:

type(a):
type(b):
isinstance(a, A): True
isinstance(a, B): False
isinstance(b, B): True
isinstance(b, A): True

  显然,type()只会返回实例的直接类型,不考虑继承关系;而isinstance()会考虑继承关系,如果实例是指定类型或者其派生类,也会返回True。在上面的例子中,b的类型为B,而B为A的派生类,所以isinstance(b, A)返回的是True(尽管b并不是A的实例)。