Python 提供了如下两个函数来检查类型:

issubclass(cls, class_or_tuple):检查 cls 是否为后一个类或元组包含的多个类中任意类的子类。

isinstance(obj, class_or_tuple):检查 obj 是否为后一个类或元组包含的多个类中任意类的对象。

通过使用上面两个函数,程序可以方便地先执行检查,然后才调用方法,这样可以保证程序不会出现意外情况。

如下程序示范了通过这两个函数来检查类型:

# 定义一个字符串

hello = "Hello";

# "Hello"是str类的实例,输出True

print('"Hello"是否是str类的实例: ', isinstance(hello, str))

# "Hello"是object类的子类的实例,输出True

print('"Hello"是否是object类的实例: ', isinstance(hello, object))

# str是object类的子类,输出True

print('str是否是object类的子类: ', issubclass(str, object))

# "Hello"不是tuple类及其子类的实例,输出False

print('"Hello"是否是tuple类的实例: ', isinstance(hello, tuple))

# str不是tuple类的子类,输出False

print('str是否是tuple类的子类: ', issubclass(str, tuple))

# 定义一个列表

my_list = [2, 4]

# [2, 4]是list类的实例,输出True

print('[2, 4]是否是list类的实例: ', isinstance(my_list, list))

# [2, 4]是object类的子类的实例,输出True

print('[2, 4]是否是object类及其子类的实例: ', isinstance(my_list, object))

# list是object类的子类,输出True

print('list是否是object类的子类: ', issubclass(list, object))

# [2, 4]不是tuple类及其子类的实例,输出False

print('[2, 4]是否是tuple类及其子类的实例: ', isinstance([2, 4], tuple))

# list不是tuple类的子类,输出False

print('list是否是tuple类的子类: ', issubclass(list, tuple))

通过上面程序可以看出,issubclass() 和 isinstance() 两个函数的用法差不多,区别只是 issubclass() 的第一个参数是类名,而 isinstance() 的第一个参数是变量,这也与两个函数的意义对应:issubclass 用于判断是否为子类,而 isinstance() 用于判断是否为该类或子类的实例。

issubclass() 和 isinstance() 两个函数的第二个参数都可使用元组。例如如下代码:

data = (20, 'fkit')

print('data是否为列表或元组: ', isinstance(data, (list, tuple))) # True

# str不是list或者tuple的子类,输出False

print('str是否为list或tuple的子类: ', issubclass(str, (list, tuple)))

# str是list或tuple或object的子类,输出True

print('str是否为list或tuple或object的子类 ', issubclass(str, (list, tuple, object)))

此外,Python 为所有类都提供了一个 __bases__ 属性,通过该属性可以查看该类的所有直接父类,该属性返回所有直接父类组成的元组。例如如下代码:

class A:

pass

class B:

pass

class C(A, B):

pass

print('类A的所有父类:', A.__bases__)

print('类B的所有父类:', B.__bases__)

print('类C的所有父类:', C.__bases__)

运行上面程序,可以看到如下运行结果:

类A的所有父类: (,)

类B的所有父类: (,)

类C的所有父类: (, )

从上面的运行结果可以看出,如果在定义类时没有显式指定它的父类,则这些类默认的父类是 object 类。

Python 还为所有类都提供了一个 __subclasses__() 方法,通过该方法可以查看该类的所有直接子类,该方法返回该类的所有子类组成的列表。例如在上面程序中增加如下两行:

print('类A的所有子类:', A.__subclasses__())

print('类B的所有子类:', B.__subclasses__())

运行上面代码,可以看到如下输出结果:

类A的所有子类: []

类B的所有子类: []

php isinstance,Python issubclass和isinstance相关推荐

  1. python issubclass 和 isinstance函数

    Python issubclass() 函数 issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类. 语法: issubclass(class, clas ...

  2. [转载] issubclass在python中的意思_python issubclass 和 isinstance函数

    参考链接: Python issubclass() Python issubclass() 函数 issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类. ...

  3. python isinstance和issubclass区别

    一.issubclass 判断两个类是否是同个类,或者有继承关系.只能判断类不能判断实例 class A:pass class B(A):pass print(issubclass(B,A)) pri ...

  4. Python面向对象知识点详解(含__init__、__add__、__str__、issubclass()、isinstance()等方法的使用)

    Python面向对象 创建类 类属性与方法 `__init__()` 类的构造函数(初始化方法) 类的继承 方法重写 基础重载方法 `__str__( self )`的使用 运算符重载 `__add_ ...

  5. python学习高级篇(part4)--内置函数issubclass和isinstance

    学习笔记,仅供参考,有错必纠 文章目录 issubclass()函数 举个例子 isinstance()函数 举个例子 issubclass()函数 内置函数issubclass()用于判断类对象与类 ...

  6. python中内建函数isinstance的用法

    2019独角兽企业重金招聘Python工程师标准>>> 语法: isinstance(object,type) 作用: 来判断一个对象是否是一个已知的类型. 其第一个参数(objec ...

  7. issubclass和isinstance 反射 内置方法(魔术方法)

    目录 issubclass 和 isinstance issubclass isinstance 反射 通过用户输入的key,value往对象中赋值 动态的往对象中放方法 动态的删除属性 动态删除对象 ...

  8. python isinstance_Python之isinstance | 学步园

    isinstance isinstance(object, classinfo) 判断实例是否是这个类或者object是变量 classinfo 是类型(tuple,dict,int,float) 判 ...

  9. python中isinstance用法_python 之isinstance用法

    isinstance() 函数来判断一个对象是否是一个已知的类型类似 type(). isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关系. i ...

最新文章

  1. 了解下RDF 容器元素
  2. “是男人就下一百层”h5游戏全网最详细教学、全代码,js操作
  3. Comp-Agg (A Compare-Aggregate Model for Matching Text Sequences)
  4. 微信小程序实践_3点击版面图片获取新闻链接
  5. jdk8运行jdk7的代码_即使在jdk中也有错误的代码
  6. 输入参数的数目不足 matlab_哈工大被禁用MATLAB,工科学生慌了,论文至上间接导致软件依赖?...
  7. java jnotify_Jnotify文件监控的用法以及Jar文件导入的方法
  8. 服务器里怎么更改网站图片大小,php实现在服务器端调整图片大小的方法
  9. 转载: CentOS下配置Apache
  10. [笔记].Nios II 软核性能基准
  11. Stream,byte[],LZMA
  12. css中的相对定位、绝对定位、固定定位
  13. centos7 设置代理
  14. Python实用案例,Python脚本实现快速卡通化人物头像,让我想起了QQ秀时光!
  15. 硬件科普系列之硬盘——前言与准备知识篇
  16. MongoDB_实战部分(二)
  17. 世界各国领土面积排行(第二个版本)
  18. 一键卸载cad,强力卸载cad,强力删除autodesk,完美卸载max,彻底卸载revit,彻底删除autodesk的任何软件
  19. python画哆啦A梦和大雄
  20. Anaconda卸载

热门文章

  1. Observe rainy world
  2. MySQL 获取首次登录日期、登录设备号
  3. vue实现两重列表集合,点击显示,点击隐藏的折叠效果,(默认显示集合最新一条数据,点击展开,显示集合所有数据)...
  4. vue 自定义指令(directive)实例
  5. 配置 BeautifulSoup
  6. 政务大数据的东莞实践 智慧政府建设步伐加快
  7. SQL基础之 基本属性和运算 (一)
  8. 用Python写脚本:通过ssh在Windows下批量管理Linux
  9. js 获取当前gmt时间_javascript-如何将日期转换为GMT?
  10. thread.sleep是让哪个线程休眠_java多线程必看:java线程的生命周期