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绘图库Matplotlib的安装
Jul 03 Python
python获取指定网页上所有超链接的方法
Apr 04 Python
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
python xml解析实例详解
Nov 14 Python
python 顺时针打印矩阵的超简洁代码
Nov 14 Python
利用anaconda保证64位和32位的python共存
Mar 09 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
Python使用plt.boxplot() 参数绘制箱线图
Jun 04 Python
PyTorch安装与基本使用详解
Aug 31 Python
聊聊python中的循环遍历
Sep 07 Python
使用pytorch实现线性回归
Apr 11 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
PHP中,文件上传
2006/12/06 PHP
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
jquery 简单导航实现代码
2009/09/11 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
struts2+jquery+json实现异步加载数据(自写)
2013/06/24 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python接口开发实现步骤详解
2020/04/26 Python
蛋白质世界:Protein World
2017/11/23 全球购物
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
会计专业毕业生自我鉴定
2013/10/29 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
统计专业自荐书
2014/07/06 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
离职报告格式
2014/11/04 职场文书
刘胡兰观后感
2015/06/16 职场文书
战友聚会致辞
2015/07/28 职场文书
2016年元旦寄语
2015/08/17 职场文书
Python 如何安装Selenium
2021/05/06 Python
详解Laravel制作API接口
2021/05/31 PHP
Go语言应该什么情况使用指针
2021/07/25 Golang