<h2>解释</h2>
<p>这就是为什么你的比较没有达到预期的效果</p>
<pre><code>>>> class ClassA(object):
... pass
...
>>> class ClassB(object):
... pass
...
>>> type(ClassB)
<class 'type'>
>>> type(ClassA)
<class 'type'>
>>> type(ClassA) == type(ClassB)
True
</code></pre>
<p>但是为什么<code>ClassA</code>和<code>ClassB</code>具有相同的类型<code>type</code>?引用<a href="https://docs.python.org/3/reference/datamodel.html#customizing-class-creation" rel="noreferrer">docs</a>:</p>
<blockquote>
<p>By default, classes are constructed using type(). The class body is
executed in a new namespace and the class name is bound locally to the
result of type(name, bases, namespace).</p>
</blockquote>
<p>示例:</p>
<pre><code>>>> ClassB
<class '__main__.ClassB'>
>>> type('ClassB', (), {})
<class '__main__.ClassB'>
>>> type(ClassB)
<class 'type'>
>>> type(type('ClassB', (), {}))
<class 'type'>
</code></pre>
<p>获取<code>ClassB</code>的类型与获取<code>type('ClassB', (), {})</code>的类型完全相同,即<code>type</code>。</p>
<h2>解决方案</h2>
<p><strong>直接比较它们(w/out使用<code>type()</code>函数):</p>
<pre><code>>>> ClassA
<class '__main__.ClassA'>
>>> ClassB
<class '__main__.ClassB'>
>>> ClassA == ClassB
False
</code></pre>
<p><strong>或初始化它们并比较它们的对象类型:</p>
<pre><code>>>> a = ClassA()
>>> b = ClassB()
>>> type(a)
<class '__main__.ClassA'>
>>> type(b)
<class '__main__.ClassB'>
>>> type(a) == type(b)
False
</code></pre>
<p>FWIW您还可以使用<code>is</code>代替<code>==</code>(用于类)。</p>