擅长:python、mysql、java
<p>问题是,在python中传递给类方法的第一个参数始终是调用该方法的类实例的副本,通常标记为<code>self</code>。如果类是这样声明的:</p>
<pre><code>class foo(object):
def foodo(self, thing=None, thong='not underwear'):
print thing if thing else "nothing"
print 'a thong is',thong
</code></pre>
<p>它的行为和预期的一样。</p>
<p><strong>说明:</strong></p>
<p>在不使用<code>self</code>作为第一个参数的情况下,当执行<code>myfoo.foodo(thing="something")</code>时,使用参数<code>(myfoo, thing="something")</code>调用<code>foodo</code>方法。实例<code>myfoo</code>随后被分配给<code>thing</code>(因为<code>thing</code>是第一个声明的参数),但是python还试图将<code>"something"</code>分配给<code>thing</code>,因此出现异常。</p>
<p>要演示,请尝试使用原始代码运行此命令:</p>
<pre><code>myfoo.foodo("something")
print
print myfoo
</code></pre>
<p>输出如下:</p>
<pre><code><__main__.foo object at 0x321c290>
a thong is something
<__main__.foo object at 0x321c290>
</code></pre>
<p>您可以看到“thing”被分配了对类“foo”的实例“myfoo”的引用。^文档中的{a1}进一步解释了函数参数是如何工作的。</p>