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

yipeiwu_com6年前Python基础

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

验证类型用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设计了一个程序来实现自由管控。 功能虽然简单,但大家可以通过其思路来实现更多的功能。...

python logging重复记录日志问题的解决方法

日志相关概念 日志是一种可以追踪某些软件运行时所发生事件的方法。软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事件可以用一个可包含可选变量数据的消息来描...

Python线上环境使用日志的及配置文件

目录 瞎比比 与 print 相比 logging 有什么优势? 基础用法 保存到文件 多模块使用 logging 使用配置文件配置 logging 瞎...

tensorflow中tf.slice和tf.gather切片函数的使用

tf.slice(input_, begin, size, name=None):按照指定的下标范围抽取连续区域的子集 tf.gather(params, indices, valida...

举例讲解Python设计模式编程的代理模式与抽象工厂模式

代理模式 Proxy模式是一种常用的设计模式,它主要用来通过一个对象(比如B)给一个对象(比如A) 提供'代理'的方式方式访问。比如一个对象不方便直接引用,代理就在这个对象和访问者之间做...