擅长:python、mysql、java
<p>我知道这会让你困惑,因为你必须把<code>cls</code>传递给<code>super().__new__</code>,但是你不能</strong>把它传给<code>super().__call__</code>。在</p>
<p>这是因为<code>__call__</code>是一个普通的方法,而{<cd5>}是特殊的。它是<a href="https://docs.python.org/reference/datamodel.html#object.__new__" rel="nofollow noreferrer">behaving like a ^{<cd6>}</a>:</p>
<blockquote>
<h3><code>object.__new__(cls[, ...])</code></h3>
<p>Called to create a new instance of class <code>cls</code>. <code>__new__()</code> is a static method (special-cased so you need not declare it as such) [...]</p>
</blockquote>
<p>作为staticmethod,它需要所有参数</strong>,而不需要将第一个参数传递给普通方法(它已经绑定)。在</p>
<p>所以把它改成:</p>
<pre><code>return super().__call__(*args, **kw)
</code></pre>
<p>在<code>__call__</code>内。在</p>