博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
py知识积累 类型判断
阅读量:5840 次
发布时间:2019-06-18

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

hot3.png

isinstance 和 type的区别在于:

class A:    passclass B(A):    passisinstance(A(), A)  # returns Truetype(A()) == A      # returns Trueisinstance(B(), A)    # returns Truetype(B()) == A        # returns False

区别就是 对于subclass之类的 type无法满足需要

-------------------

和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

http://en.wikipedia.org/wiki/Duck_typing

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

 

转载于:https://my.oschina.net/raddleoj/blog/818329

你可能感兴趣的文章
安卓中数据库的搭建与使用
查看>>
AT3908 Two Integers
查看>>
.NET 设计规范--.NET约定、惯用法与模式-2.框架设计基础
查看>>
win7 64位+Oracle 11g 64位下使用 PL/SQL Developer 的解决办法
查看>>
sql 内联,左联,右联,全联
查看>>
C++关于字符串的处理
查看>>
Breaking parallel loops in .NET C# using the Stop method z
查看>>
[轉]redis;mongodb;memcache三者的性能比較
查看>>
让你的WPF程序在Win7下呈现Win8风格主题
查看>>
802.11 学习笔记
查看>>
构建Docker Compose服务堆栈
查看>>
浮点数内存如何存储的
查看>>
JsonCpp 的使用
查看>>
问题账户需求分析
查看>>
hp 服务器通过串口重定向功能的使用
查看>>
MongoDB CookBook读书笔记之导入导出
查看>>
HTML 5实现的手机摇一摇
查看>>
此博客不再发表对自己私事的看法
查看>>
导致Asp.Net站点重启的10个原因
查看>>
【PMP】Head First PMP 学习笔记 第一章 引言
查看>>