为什么"未来()是未来"假?

时间:2017-05-07 17:59:18

标签: python

我很困惑,这不符合我的预期:

public class TheRepository<T> : IRepository<T> where T : class, IHaveId
{
    public void InsertOrUpdate(T instance)
    {
        if (instance.Id == default(int))
        {
            context.Set<T>().Add(instance);
        }
    }
}

输出结果为:

from concurrent.futures import Future

f = Future()

print(type(f))

if f is Future:
   print("Future")
else:
   print("Other")

虽然我在期待:

<class 'concurrent.futures._base.Future'>
Other

发生了什么事?为什么没有<class 'concurrent.futures._base.Future'> Future 是真的?

1 个答案:

答案 0 :(得分:5)

如果您查看Python documentation

  

6.10.3。身份比较

     

运算符isis not测试对象标识:x is y是真的,当且仅当 x y 是同一个对象。使用id()函数确定对象标识。 x is not y产生反向真值。

因此,is不检查对象是否是类的实例,但是如果两个对象具有相同的标识。为此,您使用内置函数isinstance(instance, class)

if isinstance(f, Future):