擅长:python、mysql、java
<p>如果使用<code>super()</code>,则必须始终使用它来确保调用所有类的方法。您的<code>Base1</code>和<code>Base2</code>类也应该在它们的<code>__init__()</code>方法中调用<code>super(...).__init__()</code>。这将确保最终调用方法解析顺序中的所有类。在</p>
<p>当并非所有<code>__init__()</code>方法都有空参数列表时,这确实有点棘手。在某个时刻,<code>super()</code>会让您调用<code>object.__init__()</code>,而且它从不接受任何参数。问题是,您可能不知道在哪些类中可能会发生这种情况。您可以通过创建一个<code>object</code>子类来解决这个问题,该子类接受<code>__init__()</code>中任意数量的参数,并从中派生。该类不需要调用<code>object.__init__()</code>,因为该方法实际上不执行任何操作(或者,如果您怀疑这可能会发生更改,则可以在不使用<code>super()</code>的情况下调用<code>object.__init__()</code>)。在</p>
<p>通常,<code>super()</code>在处理参数时需要格外小心,因为您可能不知道在方法解析顺序中,下一个类将是哪个类,因为您的代码用户可能会使用您的基类以您意想不到的组合创建新的类。因此,您需要做一些工作来确保所有类中的方法签名都是兼容的。在</p>
<p>有关更多信息,请参阅雷蒙德·海丁格的开创性著作<a href="https://rhettinger.wordpress.com/2011/05/26/super-considered-super/" rel="nofollow noreferrer">Python's Super() Considered Super</a>。在</p>