一、isinstance与type

在游戏项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端“参数错误”错误码。

这样做不但便于调试,而且增加健壮性。因为客户端是可以作弊的,不要轻易相信客户端传过来的参数。

验证类型用type函数,非常好用,比如

print(type('foo') == str)
True
print(type(2.3) in (int, float))
True

既然有了type()来判断类型,为什么还有isinstance()呢?

一个明显的区别是在判断子类。

type()不会认为子类是一种父类类型;isinstance()会认为子类是一种父类类型。

千言不如一码。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Foo(object):passclass Bar(Foo):passprint(type(Foo()) == Foo)
True
print(type(Bar()) == Foo)
False
# isinstance参数为对象和类
print(isinstance(Bar(),Foo))
True

需要注意的是,旧式类跟新式类的type()结果是不一样的。旧式类都是<type ‘instance’>。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# python2.+
class A:passclass B:passclass C(object):passprint('old style class',type(A()))  # old style class <type 'instance'>print('old style class',type(B()))  # old style class <type 'instance'>print('new style class',type(C()))  # new style class <class '__main__.C'>print(type(A()) == type(B()))  # True

注意:不存在说isinstance比type更好。只有哪个更适合需求。

二、issubclass

class Parent:passclass Sub(Parent):passprint(issubclass(Sub, Parent))
True
print(issubclass(Parent, object))
True

Python面向对象:isinstance和issubclass相关推荐

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

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

  2. issubclass在python中的意思_python基础之类的isinstance与issubclass、反射

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo: pass o ...

  3. Python面向对象编程:类继承和其衍生术语

    Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...

  4. python类高级用法_十.python面向对象高级用法

    1.反射 1.1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的 ...

  5. python面向对象编程的三大特性_Python面向对象总结及类与正则表达式详解

    Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象 ...

  6. python getattr_来一点Python面向对象第一级进阶的东西

    isinstance和issubclass # isinstance(obj,cls) 检查obj是否是类cls的对象class Foo: def __init__(self,name): self. ...

  7. Python 面向对象之双下方法,内置函数

    isinstance和issubclass isinstance(obj,cls)      # 检查是否obj是否是类 cls 的对象 class Foo(object):passobj = Foo ...

  8. python面向对象难学_python-面向对象进阶

    一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查obj是否是cls的对象 issubclass(sub,super)检 ...

  9. python面向对象三大特性_深入理解Python面向对象的三大特性

    在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合.编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希 ...

  10. python基础系列教程——python面向对象编程全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python面向对象编程全解. 面向对象技术简介 一个类占有一个独立的空间,类中的属性叫做类变量,类中的函数,叫做类的方法. 类(Class) ...

最新文章

  1. 《Microsoft Sql server 2008 Internal》读书笔记--第八章The Query Optimizer(1)
  2. 【人物】雷军去了联想,干货分享全场哑口无言,除了掌声...
  3. 可视化分析WEB访问:logstalgia
  4. day5学python 基础+装饰器内容
  5. caffe安装 cuda安装 opencv安装 cudnn安装 python相关依赖库安装
  6. java的编程规范_JAVA编程规范-OOP规范
  7. JAVASCRIPT实现XML分页
  8. 搜狗浏览器连接海康摄像头,无法显示画面
  9. myeclipse6.5安装jrable
  10. 程序设计c语言答案pdf,C语言程序设计习题解答.pdf
  11. 思源黑体官方下载地址
  12. 互联网行业,常见含金量高的证书,看看你有几个?
  13. 服务器iscsi如何修复,服务器重启后,iSCSI目标卡住了重新连接
  14. 已下载好的OpenCV4.5.5 CMake .cache文件夹
  15. 如何找到刑事案件的辩点(律师角度)
  16. ins图片视频批量下载
  17. 倡议书格式范文_倡议书的格式及范文
  18. memcacheredis构建缓存服务器
  19. 1. Resnet网络详解
  20. PHP超全局变量之$_GETT和$_POST

热门文章

  1. 【分布计算环境学习笔记】9 Web Service
  2. 错误:Failed to create the Java Virtual Machine
  3. 本网站的幻灯片浏览很好看,不懂谁有这代码?
  4. 如何绘制类似仓库的平面位置图
  5. exchange server 2003 安装过程中的一个问题
  6. 2014c语言二级考试题,2014计算机二级等级考试试题:C语言模拟题
  7. python requests 异步调用_带有Python请求的异步请求
  8. 【实用】表维护视图SM30增加自定义按钮的实现
  9. 【超级实用】程序添加后台执行的选项
  10. VA01保存后都更新了什么表