擅长:python、mysql、java
<p>我不得不说,我首先想到了一个更复杂的问题。但是大卫·沃利弗的回答是绝对正确的。正是这个复制的自我造成了问题。这样,位置参数就越界了,asType被赋予一个值作为positional参数(一次)和一个关键字参数(第二次!)。在</p>
<p>一个更有趣的问题是,当您想增强被调用的例程(在示例中是createTable)而不需要每次都增强中间函数时,该怎么做。在这里,**args解决方案实现了以下目的:</p>
<p>例如:</p>
<pre><code>def createOrOpenTable(self, tableName, schema, **args):
if self.tableExists(tableName):
return self.openTable(tableName, **args)
else:
return self.createTable(tableName, schema, **args)
</code></pre>
<p>这样,就可以增强createTable和openTable的签名,而不必再更改CreateOrPentable。在</p>
<p>当create和openTable可以有不同的关键字参数时,当然这两个例程都必须定义如下:</p>
^{pr2}$
<p>others参数会占用方法未知的任何关键字参数,也不需要对其求值。在</p>