从 Python 2.7 迁移到 3.7 - isinstance(obj, None) 与 is None 之间的区别

Migrating from Python 2.7 to 3.7 - difference between isinstance(obj, None) vs is None

我必须将项目从 Python 2.7 迁移到 3.7。

这行代码用于 2.7

if isinstance(obj, None):

出于某种原因,它不再存在了。如果我这样修改:

if isinstance(obj, type(None)):

它会起作用的。

但是我的问题是,这个调用有什么区别:

isinstance(obj, None)

obj is None

为什么最初的开发者决定使用 isinstance over is? (在 py 2.7 中)

谢谢。

is 运算符用于检查两个对象是否相同,而 isinstance 用于检查第二个参数是否出现在第一个参数的继承链中的任何位置。

obj is None

obj实际上是None.

isinstance(obj, type(None))

检查 obj 是 None 类型的对象。

但实际上只有一个None类型的对象。 None 是 None 类型的唯一对象。所以当你指定None类型时,你写成type(None).

毕竟isinstance(None, type(None))是真的