擅长:python、mysql、java
<p>您可以使用这样一个事实,即如果<code>A.inner</code>是一个类,并且<code>B</code>或<code>C</code>没有显式地对内部类进行子类化,那么<code>B.inner</code>和<code>C.inner</code>是同一个对象</em>-><code>A.inner</code>:</p>
<pre><code>>>> class A:
... class inner: pass
...
>>> class B(A): pass
...
>>> class C(A): pass
...
>>> B.inner is C.inner
True
>>> C.inner is A.inner
True
</code></pre>
<p>我们正在利用字典来确保唯一性<em>和</em>顺序(如果您使用的版本还不能保证dict顺序,请使用<code>collections.OrderedDict</code>或其他一些顺序集实现)。我们可以确定需要在<code>D.inner</code>上对哪些类进行子类化,如下所示:</p>
<pre><code>inner_classes = {getattr(klass, 'inner'): True for klass in [C, B] # control your MRO here.
if getattr(klass, 'inner') is not A.inner}
# Ensure that we also extend A.inner, in case neither B nor C subclasses A.inner
inner_classes[A.inner] = True
class D(A):
class inner(*inner_classes.keys()): pass
</code></pre>
<p>通过这种方式,我们得到了一致的MRO,不管哪个类(如果有的话)子类<code>A.inner</code>和<code>D.inner</code>工作</p>