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实现多行注释的另类方法
Aug 22 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
python抓取并保存html页面时乱码问题的解决方法
Jul 01 Python
Python迭代器和生成器定义与用法示例
Feb 10 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 Python
Python continue继续循环用法总结
Jun 10 Python
flask入门之文件上传与邮件发送示例
Jul 18 Python
python调用外部程序的实操步骤
Mar 04 Python
为什么你还不懂得怎么使用Python协程
May 13 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 Python
python中_del_还原数据的方法
Dec 09 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 04 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调用Java对象的方法
2006/10/09 PHP
PHP生成月历代码
2007/06/14 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
jQuery操作表单常用控件方法小结
2015/03/23 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
layui自定义工具栏的方法
2019/09/19 Javascript
Python pass 语句使用示例
2014/03/11 Python
Python设计模式之观察者模式实例
2014/04/26 Python
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
为python设置socket代理的方法
2015/01/14 Python
python实现可逆简单的加密算法
2019/03/22 Python
python三大神器之fabric使用教程
2019/06/10 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
Ratchet 模态框的实现
2020/08/19 HTML / CSS
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
SQL Server面试题
2013/04/04 面试题
关于期中考试的反思
2014/02/02 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
大学生党员个人总结
2015/02/13 职场文书
工程服务质量承诺书
2015/04/29 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP