博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 判断变量类型用instance而不用type
阅读量:6844 次
发布时间:2019-06-26

本文共 943 字,大约阅读时间需要 3 分钟。

hot3.png

和Python的new-style class有关。相关链接

以下代码在Python2.5中执行:

>>> class A:...  pass... >>> a = A()>>> class B:...  pass... >>> b = B()>>> type(a) is type(b)True>>>

在old-style class中,任意instance的type都是'instance'。所以绝对不能用type来判断其类型。

另外这个问题又与Python的思想有关,正常情况下不应该编写代码检查类型的,而应该直接假设被操作的instance具有你希望的属性,否则抛出异常。即使需要检查类型,也应该用isinstance来判断,这样你期望类型的subclass也能正常被处理(比如,一个函数需要处理Message类型,那么它应该也能处理Message的子类型MyMessage,所以应该使用isinstance(arg,Message)这样来判断而不是type(arg) == Message来判断) 参考Duck Typing ...

另外这个问题还与metaclass有关,但是我实在想不起来在哪个地方会导致type()返回的不是type这个class的instance了…待补充…

Python 2.7.3 (default, May 12 2012, 00:10:31) [GCC 4.2.1 (Gentoo 4.2.1_p5666, Apple Inc. build 5666) (dot 3)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> from collections import Iterator>>> class A(object):...  def __iter__(self):...   pass...  def next(self):...   pass... >>> isinstance(A(), Iterator)True

转载于:https://my.oschina.net/Hgladiator/blog/853506

你可能感兴趣的文章
linux 常用小命令
查看>>
AIX系列------ISO挂载
查看>>
重启citrix服务器,无法打开发布的程序
查看>>
按照文件名中包含的版本号信息对文件名列表进行排序
查看>>
jQuery学习笔记3:过滤器
查看>>
第四课:单用户及救援模式(一)
查看>>
zabbix企业应用:利用自动发现监控IIS站点
查看>>
table 去掉 td之间间距
查看>>
根据status信息对MySQL服务器进行优化-1
查看>>
sui picker,datetimepicker,citypicker代码整理
查看>>
Redis基础教程第2节 Redis和NoSql 介绍与应用场景
查看>>
CentOS6.6下设置grub密码方法
查看>>
Linux下DHCP服务器配置
查看>>
创建数据库恢复
查看>>
一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-使用UDA操纵SQL语句...
查看>>
VS2010与IIS Express
查看>>
jdis操作redis cluster
查看>>
算法学习之路|最小生成树——prime算法
查看>>
如何授予邮箱的代理发送权限
查看>>
Java Hex 16进制的 byte String 转换类
查看>>