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 相关文章推荐
pandas 将list切分后存入DataFrame中的实例
Jul 03 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
Python函数返回不定数量的值方法
Jan 22 Python
实例详解Matlab 与 Python 的区别
Apr 26 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
python中property和setter装饰器用法
Dec 19 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
django教程如何自学
Jul 31 Python
Python计算矩阵的和积的实例详解
Sep 10 Python
详解基于Scrapy的IP代理池搭建
Sep 29 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 ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
php使用正则验证中文
2016/04/06 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
Python 随机生成中文验证码的实例代码
2013/03/20 Python
Python 登录网站详解及实例
2017/04/11 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
请假条范文大全
2014/04/10 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL