python数据类型判断type与isinstance的区别实例解析


Posted in Python onOctober 31, 2017

在项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端“参数错误”错误码。
这样做不但便于调试,而且增加健壮性。因为客户端是可以作弊的,不要轻易相信客户端传过来的参数。

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

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

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

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

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

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

千言不如一码。

class Foo(object):
  pass
  
class Bar(Foo):
  pass
  
print type(Foo()) == Foo
print type(Bar()) == Foo
print isinstance(Bar(),Foo)
  
class Foo(object):
  pass
  
class Bar(Foo):
  pass
  
print type(Foo()) == Foo
print type(Bar()) == Foo
print isinstance(Bar(),Foo)
输出
True
False
True

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

class A:
  pass
class B:
  pass
class C(object):
  pass
print 'old style class',type(A())
print 'old style class',type(B())
print 'new style class',type(C())
print type(A()) == type(B())
class A:
  pass
class B:
  pass
class C(object):
  pass
print 'old style class',type(A())
print 'old style class',type(B())
print 'new style class',type(C())
print type(A()) == type(B())
输出
old style class <type 'instance'>
old style class <type 'instance'>
new style class <class '__main__.C'>
True

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

总结

以上就是本文关于python数据类型判断type与isinstance的区别实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Python编程之黑板上排列组合,你舍得解开吗、浅谈Python由__dict__和dir()引发的一些思考等,有什么问题可以留言,大家一起交流讨论。

Python 相关文章推荐
Python程序语言快速上手教程
Jul 18 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
Python将视频或者动态图gif逐帧保存为图片的方法
Sep 10 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
Tensorflow累加的实现案例
Feb 05 Python
解决Opencv+Python cv2.imshow闪退问题
Apr 24 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 Python
使用pytorch实现论文中的unet网络
Jun 24 Python
Python 必须了解的5种高级特征
Sep 10 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 Python
用python自动生成日历
Apr 24 Python
opencv检测动态物体的实现
Jul 21 Python
python中requests库session对象的妙用详解
Oct 30 #Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 #Python
Python数据结构与算法之列表(链表,linked list)简单实现
Oct 30 #Python
Python进程间通信之共享内存详解
Oct 30 #Python
import的本质解析
Oct 30 #Python
python中hashlib模块用法示例
Oct 30 #Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 #Python
You might like
ThinkPHP中关联查询实例
2014/12/02 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
删除PHP数组中的重复元素的实现代码
2017/04/10 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
js select常用操作控制代码
2010/03/16 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
vue 权限认证token的实现方法
2018/07/17 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
简单上手Python中装饰器的使用
2015/07/12 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
python IP地址转整数
2020/11/20 Python
开业庆典策划方案
2014/02/18 职场文书
幼儿教师国培感言
2014/02/19 职场文书
教师四风问题整改措施
2014/09/25 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL