对身份感到困惑并且是运营商

时间:2014-02-07 17:09:56

标签: python python-2.6

我最近看到了这段代码:

x = [2, 3, 4]
if type(x) is list:
    #some logic

并且对if条件如何消失感到困惑...我认为is检查内存标识,而id的{​​{1}}与{x不同1}} id,但如果是这样的情况,这list条件是如何发生的呢? (我的印象是Python中唯一的原生单身是if)。

1 个答案:

答案 0 :(得分:2)

此处x是类list的实例,在新样式类type()中返回实例本身的类,在本例中为list。考虑这个简单的例子:

>>> class A(object):
    pass
... 
>>> type(A())         #calling type on the instance returns its class
<class '__main__.A'>
>>> type(A()) is A
True

请注意,上面的示例不适用于用户定义的旧式类,因为所有实例都是instance类型。

>>> class A:
    pass
... 
>>> type(A())
<type 'instance'>