为什么使用isinstance()而不是type()?

Sup*_*Man 3 python types

我见过人们经常建议使用isinstance()而不是type(),我发现这很奇怪,因为type()似乎对我来说更具可读性.

>>> isinstance("String",str)
True
>>> type("String") is str
True
Run Code Online (Sandbox Code Playgroud)

后者似乎更加pythonic和清晰,而前者稍微混淆,并暗示一个特定的用途(例如,测试用户构建的类而不是内置类型)但是还有一些我不知道的其他好处?type()会导致一些不稳定的行为或错过一些比较吗?

raf*_*elc 10

让我举一个简单的例子,说明它们可能有所不同:

>>> class A(object): pass
>>> class B(A) : pass
>>> a = A()
>>> b = B()
Run Code Online (Sandbox Code Playgroud)

到目前为止,声明了一个变量A和一个B派生自的变量A.

>>> isinstance(a, A)
True
>>> type(a) == A
True
Run Code Online (Sandbox Code Playgroud)

>>> isinstance(b, A)
True
>>> type(b) == A
False
Run Code Online (Sandbox Code Playgroud)