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入门篇之文件
Oct 20 Python
Python 类与元类的深度挖掘 I【经验】
May 06 Python
Python运行报错UnicodeDecodeError的解决方法
Jun 07 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
python多线程socket编程之多客户端接入
Sep 12 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
Apr 19 Python
对python 自定义协议的方法详解
Feb 13 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
Jul 07 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
使用pygame写一个古诗词填空通关游戏
Dec 03 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
Dec 13 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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函数与传递参数实例分析
2014/11/15 PHP
PHP 验证登陆类分享
2015/03/13 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
Bootstrap基础学习
2015/06/16 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
jQuery动态操作表单示例【基于table表格】
2018/12/06 jQuery
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
json数据格式常见操作示例
2019/06/13 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
Python import与from import使用及区别介绍
2018/09/06 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
keras中的History对象用法
2020/06/19 Python
python操作链表的示例代码
2020/09/27 Python
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
安全横幅标语
2014/06/09 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python