<p>这不是一个自定义的元类问题(尽管在元类阶段诊断为<em></em>):</p>
<pre><code>>>> class Normal(object): pass
...
>>> class MyObject(object, Normal): pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Error when calling the metaclass bases
Cannot create a consistent method resolution
order (MRO) for bases object, Normal
</code></pre>
<p>问题和这个一样:</p>
<pre><code>>>> class Derived(Normal): pass
...
>>> class Ok(Derived, Normal): pass
...
>>> class Nope(Normal, Derived): pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Error when calling the metaclass bases
Cannot create a consistent method resolution
order (MRO) for bases Normal, Derived
</code></pre>
<p>也就是说,不能将继承从基类乘上派生类——不可能定义一个满足通常MRO约束/保证的一致MRO。</p>
<p>幸运的是,您不希望</em>这样做——子类可能会重写基类的某些方法(这就是普通子类<em>所做的</em>;-),而基类“在前面”意味着“隐藏重写”。</p>
<p>把基类放在派生类之后是没有用的,但至少是无害的(并且与正常的MRO保证一致)。</p>
<p>你的第一个例子当然有效,因为<code>MyMixin</code>是<em>而不是</em>派生自<code>list</code>:</p>
<pre><code>>>> MyMixin.__mro__
(<class '__main__.MyMixin'>, <type 'object'>)
</code></pre>
<p>…但是它是从<code>object</code>派生的(就像所有现代风格的Python类一样),所以第二个示例不能工作(完全独立于<code>MyMixin</code>具有自定义元类)。</p>