擅长:python、mysql、java
<p>两种方法都很好。使用<code>super()</code>的方法为子类带来了更大的灵活性</p>
<p>在直接调用方法中,<code>C.__init__</code>可以同时调用<code>A.__init__</code>和<code>B.__init__</code></p>
<p>当使用<code>super()</code>时,类需要设计为协作多重继承,其中<code>C</code>调用<code>super</code>,调用<code>A</code>的代码,该代码也将调用调用<code>B</code>的代码。有关如何使用<code>super</code>的更多详细信息,请参见<a href="http://rhettinger.wordpress.com/2011/05/26/super-considered-super" rel="noreferrer">http://rhettinger.wordpress.com/2011/05/26/super-considered-super</a></p>
<p>[回答问题,稍后编辑]</p>
<blockquote>
<p>So it seems that unless I know/control the init's of the classes I
inherit from (A and B) I cannot make a safe choice for the class I'm
writing (C).</p>
</blockquote>
<p>参考文章展示了如何通过在<code>A</code>和<code>B</code>周围添加包装类来处理这种情况。在题为“如何合并非合作类”的章节中有一个已制定的示例</p>
<p>有人可能希望多重继承更容易,让您可以毫不费力地编写Car和Planet类来获得FlyingCar,但现实情况是,单独设计的组件通常需要适配器或包装器,然后才能像我们希望的那样无缝地装配在一起:-)</p>
<p>另一个想法是:如果您对使用多重继承组合功能不满意,您可以使用组合来完全控制在哪些情况下调用哪些方法</p>