擅长:python、mysql、java
<p>使用<code>super().method</code>访问超级类的方法将已经将该方法绑定到当前实例。因此方法的<code>self</code>参数将已经被自动设置,就像调用<code>self.method()</code>时一样。在</p>
<p>因此,当您将当前实例(在本例中是<code>cls</code>类型)传递给方法时,实际上是第二次传递它。在</p>
<pre><code>super().__call__(cls, *args, **kw)
</code></pre>
<p>所以这最后会打一个电话<code>__call__(cls, cls, *args, **kw)</code>。在</p>
<p>当您的<code>__call__</code>方法解释这一点时,参数将与以下定义匹配:</p>
^{pr2}$
<p>所以第一个<code>cls</code>是正确匹配的,但是第二个<code>cls</code>被解释为变量参数列表<code>*args</code>。这里是异常的来源:<code>cls</code>在需要iterable的地方被传递,但是<code>cls</code>,类<code>ListMetaclass</code>,不是iterable。在</p>
<p>因此,这里的修复方法只是删除额外的<code>cls</code>:<code>super().method()</code>由于方法绑定已经自动包含了它。在</p>