我很困惑,这不符合我的预期:
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
是真的?
答案 0 :(得分:5)
如果您查看Python documentation:
6.10.3。身份比较
运算符
is
和is not
测试对象标识:x is y
是真的,当且仅当 x 和 y 是同一个对象。使用id()
函数确定对象标识。x is not y
产生反向真值。
因此,is
不检查对象是否是类的实例,但是如果两个对象具有相同的标识。为此,您使用内置函数isinstance(instance, class)
:
if isinstance(f, Future):