擅长:python、mysql、java
<p>正如其他人在评论中指出的,这正是<code>__new__</code>的目的。你知道吗</p>
<p>下面是创建类<code>Complex</code>的实例时发生的情况:</p>
<ol>
<li>你写<code>Complex(a, b)</code>。你知道吗</li>
<li><code>Complex.__new__(a, b)</code>被调用,默认情况下(即,如果不重写<code>__new__</code>方法),这将返回类型为<code>Complex</code>的空对象。你知道吗</li>
<li>如果<code>Complex.__new__(a, b)</code>(让我们把它表示为<code>cmplx</code>)返回的对象实际上是<code>Complex</code>类型,那么调用<code>cmplx.__init__(a, b)</code>,或者等价地调用<code>Complex.__init__(cmplx, a, b)</code>。你知道吗</li>
</ol>
<p>对于您的情况,只需在调用第二个参数时在<code>__new__</code>方法中返回<code>int</code>,否则调用超类的<code>__new__</code>方法。即:</p>
<pre><code>class Complex:
def __new__(cls, a, b):
if b == 0:
return a
return super().__new__(cls) # or equiv.: object.__new__(cls)
</code></pre>