python作为一种面向对象的编程语言,当我们想要了解一个对象的类型的时候,就离不开type()与isinstance()这两个函数。
type()
常用语法:
type(object)
输入一个对象,返回这个对象的类型,例如:
type(1)
# <type 'int'>
type(1.1)
# <class 'float'>
type([1,2,3])
# <class 'list'>
class mytype(object):
pass
# 上述代码定义了一个类
a = mytype()
# 实例化
print(type(a))
# <class '__main__.mytype'>
isinstance()
isinstance()的用法与type类似,也是用来判断一个已知的类型。
语法:
isinstance(object, classinfo)
参数:
- object -- 实例对象。
- classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。
基本类型classinfo主要有:int,float,bool,complex,str,list,dic,set,tuple
用法举例:
isinstance(2,int)
# True
isinstance(2,str)
# False
isinstance(2,(str,int,list)) #可以输入多个类型,如果是其中之一,则返回True
# True
与type()不同的是,isinstance()并非直接输入一个对象返回类型,而是需要输入一个对象以及类名,判断二者是否相同,即返回True或False。
除此之外,他们还有更深层的区别:
- type() 不会认为子类是一种父类类型,不考虑继承关系。
- isinstance() 会认为子类是一种父类类型,考虑继承关系。
例如:
class A:
pass
class B(A):
pass
# 上面两个类中,B是从A继承过来的。
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True 考虑继承关系
type(B()) == A # returns False 没考虑继承关系
小结
当需要判断对象的类型的时候,可以使用type()或者isinstance(),isinstance()更适用于已知或者预期需要判断的对象是哪种类型,以及需要对比像个对象的类型是否一致的时候使用。