Python中type()和isinstance()用法的比较?

在判断一个对象的类型的时候,我们可以使用type或者isinstance,那么两者有什么区别呢?

如果Python类没有继承关系,那么用type和isinstance都可以判断一个对象的类型,但是当类有继承关系存在的时候,要注意的是,type检查的是对象的真正类型,而isinstance会将派生类判断成基类类型。下面分别通过代码加以说明。

Python中的type方法的用法

我们定义了一个基类Base,和一个派生类Derived。a为基类对象,b为派生类对象

class Base(object):
    pass
class Derived(Base):
    pass
a = Base()
b = Derived()
type(a) is Base
True
type(b) is Derived
True
type(b) is Base
False

Python中的isinstance方法的用法

我们再来看isinstance,派生类对象b既是基类的instance,又是派生类的instance;反之则不是了,基类对象是基类的instance,但不是派生类的instance。这个其实比较好理解的:X是黄种人,当然也是人,反之X是人,但是不能说X就是黄种人:

isinstance(b, Base)
True
isinstance(b, Derived)
True
isinstance(a, Base)
True
isinstance(a, Derived)
False
isinstance([], list)
True
isinstance({}, dict)
True

此外isintance()的第二个参数接受tuple类型,只要满足元组tuple中任意类型则返回True,你可以做如下判断:

isinstance(a, (Base, Derived, Whatever))
True

isinstance的相关阅读

这里有另外一篇文章,介绍了Python中变量类型的判断。

Code问答 | CodeWenda.com

发表评论

电子邮件地址不会被公开。 必填项已用*标注

12 + = 21