您的位置:首页 > 编程语言 > Python开发

python中type和instance

2016-06-14 23:48 453 查看
和Python的new-style class有关。相关链接 http://www.python.org/doc/newstyle/

以下代码在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_typ...

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

UPDATE:

又找到这段例子,供参考
全选复制放进笔记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 darwin
Type "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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: