python type(object) 与 isinstance(object, base) 区别
来源:互联网 发布:出租房用什么软件 编辑:程序博客网 时间:2024/05/22 14:33
python type(object) 与 isinstance(object, base) 区别
python是一种解释型动态语言,所以定义变量的时候不需要强制指定其类型,解释器在运行程序的时候会自动检测,并为某些操作提供隐式的类型转换,这也就是为什么动态语言运行较慢的一个原因。
然而,程序有时候需要进行类型检查,比如函数参数类型的检查,这样可以避免一些低级bug并提高程序的安全性,即提高了代码的robust。类型检测常用的方法是type(object) 和 isinstance(object, base)。
比如定义一个类MyStr,其父类为str。
class MyStr(str): passss = MyStr()
得到的结果将会是:
type(ss) == str #返回False,但实际上对象ss是一个str。isinstance(ss, str) #返回True
可见,type只返回了生成该instance的类型,即MyStr,忽略了继承来的父类型str,但isinstance可以回溯到每一个父类,这也是我们所希望的结果。以下两种方式也可实现isinstance的功能,但比较繁琐。
issubclass(type(ss), str)type(ss) in ([str] + str.__subclasses__())
如果想让代码更加pythonic,那就用isinstance吧!isinstance的第二个位置参数可以是单个类型或由多个类型组成的一个tuple,只要object所属类型属于tuple里的任意一个元素,返回就为True。可以看看isinstance的帮助文档,比如下面:
isinstance(obj, class_or_tuple, /)Return whether an object is an instance of a class or of a subclass thereof.A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target tocheck against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)or ...`` etc.
总结、
如果想知道一个object的直接上级是谁,可用type(object);
如果想知道object是否是base的一个instance或者是base的一个subclass,可用isinstance(object, base);
一般用isinstance(object, base),少用type(object)。
但是最pythonic的方法是不要进行类型检查,详情可查看Duck Typing(鸭子类型)! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(内容同步更新到微信公众号python数学物理,微信号python_math_physics)
- python type(object) 与 isinstance(object, base) 区别
- Python中type与Object的区别
- Python中isinstance() 与 type() 区别
- python isinstance type区别
- 飘逸的python - 类型判断type与isinstance的区别
- python数据类型判断type与isinstance的区别
- python数据类型判断type与isinstance的区别
- [object] 与 [object object] 区别!
- [object] 与 [object object] 区别!
- python object和type
- 面向对象关系,type,object,base, class
- 类型判断type与isinstance的区别
- Python类型判断type与isinstance
- object... 与object[]的区别
- isInstance(Object)和instance of的区别
- Python标准库:内置函数isinstance(object, classinfo)
- c# Type、Object的区别
- Python type and object relationship
- 使用 Annotations 改进代码检查
- python如何将变量名转化为同名字符串?#转自知乎#+不同模式打开文件的完全列表
- Java与MySQL数据类型对应类型
- 微信公众号支付 (四、支付结果通知)
- 如何能成为真正优秀的程序猿,这几点你必须知道!
- python type(object) 与 isinstance(object, base) 区别
- ubuntu16.04安装pycharm生成快捷方式以及命令使用说明
- windows安装solr并配置tomcat
- Execution failed for task ':app:compileDebugJavaWithJavac'. Failed to create MD5 hash for file ...
- Filebeat如何保证在日志文件被切割(或滚动rolling)时依然正确读取文件
- 哈希表处理地址冲突的方法及成功查找的平均长度
- git使用
- 装备系统学习--B站李三影教程
- gpu显存与模型文件的关系