• 技术文章 >后端开发 >Python教程

    怎么查看一个对象的类型

    anonymityanonymity2019-05-25 15:10:48原创2637
    在Python中有两种类型判断函数,type()和isinstance()。

    php入门到就业线上直播课:进入学习

    使用type()

    首先,我们来判断对象类型,使用type()函数:

    基本类型都可以用type()判断:

    >>> type(123)
    <type 'int'>
    >>> type('str')
    <type 'str'>
    >>> type(None)
    <type 'NoneType'>

    如果一个变量指向函数或者类,也可以用type()判断:

    >>> type(abs)
    <type 'builtin_function_or_method'>
    >>> type(a)
    <class '__main__.Animal'>

    但是type()函数返回的是什么类型呢?它返回type类型。

    使用isinstance()

    对于class的继承关系来说,使用type()就很不方便。我们要判断class的类型,可以使用isinstance()函数。

    我们回顾上次的例子,如果继承关系是:

    object -> Animal -> Dog -> Husky

    那么,isinstance()就可以告诉我们,一个对象是否是某种类型。先创建3种类型的对象:

    >>> a = Animal()
    >>> d = Dog()
    >>> h = Husky()

    然后,判断:

    >>> isinstance(h, Husky)
    True

    没有问题,因为h变量指向的就是Husky对象。

    再判断:

    >>> isinstance(h, Dog)
    True

    h虽然自身是Husky类型,但由于Husky是从Dog继承下来的,所以,h也还是Dog类型。换句话说,isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。

    因此,我们可以确信,h还是Animal类型:

    >>> isinstance(h, Animal)
    True

    同理,实际类型是Dog的d也是Animal类型:

    >>> isinstance(d, Dog) and isinstance(d, Animal)
    True

    但是,d不是Husky类型:

    >>> isinstance(d, Husky)
    False

    能用type()判断的基本类型也可以用isinstance()判断:

    >>> isinstance('a', str)
    True
    >>> isinstance(u'a', unicode)
    True
    >>> isinstance('a', unicode)
    False

    并且还可以判断一个变量是否是某些类型中的一种,比如下面的代码就可以判断是否是str或者unicode:

    >>> isinstance('a', (str, unicode))
    True
    >>> isinstance(u'a', (str, unicode))
    True

    由于str和unicode都是从basestring继承下来的,所以,还可以把上面的代码简化为:

    >>> isinstance(u'a', basestring)
    True

    既然有了type()来判断类型,为什么还有isinstance()呢?一个明显的区别是在判断子类。type()不会认为子类是一种父类类型。isinstance()会认为子类是一种父类类型。

    以上就是怎么查看一个对象的类型的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:python
    上一篇:python如何检查一个文件夹是否存在,如果不存在就创建它 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• python字符如何转为小写• python如何给字符串填充0• Python如何测量脚本运行时间• 在Python中调用外部命令是什么
    1/1

    PHP中文网