擅长:python、mysql、java
<p>好了,伙计们,从g.d.d.c的部分答案来看,我认为我们这里有一个解决方案,它可以干净而简单地适用于任意的类层次结构</p>
<p>我会对它进行几天的测试,看看它是否能正常工作。我仍然不满意手动指定基的要求——我觉得包装器内部的某种内省可以自动处理这个问题。请多提些建议</p>
<p>再次感谢g.d.d.c把我踢向正确的方向</p>
<pre class="lang-py prettyprint-override"><code>def inner_class(*bases):
def _inner_class(cls):
bs = []
for b in bases:
try: bs.append(getattr(b, cls.__name__))
except AttributeError: pass
bs = sorted(set(bs), key = bs.index)
return type(cls)(
cls.__name__,
(cls, *bs),
{}
)
return _inner_class
class A:
class Inner:
...
class B(A):
class Inner(A.Inner):
...
class C(A):
...
class D(A):
...
class E(B, C, D):
@inner_class(B, C, D)
class Inner:
...
print(E.Inner.mro())
>>> [<class '__main__.Inner'>, <class '__main__.E.Inner'>, <class '__main__.B.Inner'>, <class '__main__.A.Inner'>, <class 'object'>]
</code></pre>