python判断type与isinstance的区别

前端之家收集整理的这篇文章主要介绍了python判断type与isinstance的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!

在项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端“参数错误错误码。

这样做不但便于调试,而且增加健壮性。因为客户端是可以作弊的,不要轻易相信客户端传过来的参数。

验证类型用type函数,非常好用,比如

>>type('foo') == str

True

>>type(2.3) in (int,float)

True

既然有了type()来判断类型,为什么还有isinstance()呢?

一个明显的区别是在判断子类。

type()不会认为子类是一种父类类型。

isinstance()会认为子类是一种父类类型。

  1. # @param python数据类型判断type与isinstance的区别
  2. # @author 编程之家 jb51.cc|jb51.cc
  3. class Foo(object):
  4. pass
  5. class Bar(Foo):
  6. pass
  7. print type(Foo()) == Foo
  8. print type(Bar()) == Foo
  9. print isinstance(Bar(),Foo)
  10. class Foo(object):
  11. pass
  12. class Bar(Foo):
  13. pass
  14. print type(Foo()) == Foo
  15. print type(Bar()) == Foo
  16. print isinstance(Bar(),Foo)
  17. 输出
  18. True
  19. False
  20. True
  21. # End www.jb51.cc

 

需要注意的是,旧式类跟新式类的type()结果是不一样的。旧式类都是<type 'instance'>。

  1. # @param python数据类型判断type与isinstance的区别
  2. # @author 编程之家 jb51.cc|jb51.cc
  3. class A:
  4. pass
  5. class B:
  6. pass
  7. class C(object):
  8. pass
  9. print 'old style class',type(A())
  10. print 'old style class',type(B())
  11. print 'new style class',type(C())
  12. print type(A()) == type(B())
  13. class A:
  14. pass
  15. class B:
  16. pass
  17. class C(object):
  18. pass
  19. print 'old style class',type(A())
  20. print 'old style class',type(B())
  21. print 'new style class',type(C())
  22. print type(A()) == type(B())
  23. 输出
  24. old style class <type 'instance'>
  25. old style class <type 'instance'>
  26. new style class <class '__main__.C'>
  27. True
  28. # End www.jb51.cc

 

不存在说isinstance比type更好。只有哪个更适合需求。

猜你在找的Python相关文章