<h2><em>Bound</em>vs<em>Unbound</em>方法-一个解释</h2>
<h3>。。。或者为什么Python有你指出的行为。</h3>
<p>所以,首先要注意,这在3.x中是不同的。在3.x中,您将得到<code>MyClass.f</code>是一个函数,而<code>x.f</code>是一个方法-正如预期的那样。这种行为本质上是一个糟糕的设计决策,后来被改变了。</p>
<p>这是因为Python有一个不同于大多数语言的方法的概念,它本质上是一个函数,第一个参数被预先填充为实例(<code>self</code>)。这种预填充使<em>绑定方法</em>。</p>
<pre><code>>>> x.foo
<bound method MyClass.foo of <__main__.MyClass instance at 0x1004989e0>>
</code></pre>
<p>在Python2.x和之前的版本中,有人认为没有附加到实例的方法应该是一个未绑定的方法</em>,这是一个函数,其限制是第一个参数(<code>self</code>)必须是对象的实例。然后,它就可以绑定到一个实例,并成为一个<em>绑定方法</em>。</p>
<pre><code>>>> MyClass.foo
<unbound method MyClass.foo>
</code></pre>
<p>随着时间的推移,很明显,一个未绑定的方法实际上只是一个具有这种奇怪限制的函数,这并不重要(即<code>self</code>必须是<em>'correct'</em>类型),因此它们被从语言中删除(在3.x中)。这基本上就是duck类型<code>self</code>,它适合这种语言。</p>
<pre><code>Python 3.3.0 (default, Dec 4 2012, 00:30:24)
>>> x.foo
<bound method MyClass.foo of <__main__.MyClass object at 0x100858ed0>>
>>> MyClass.foo
<function MyClass.foo at 0x10084f9e0>
</code></pre>
<h3>进一步阅读。</h3>
<p>这是一个(从内存中浓缩的)解释,可以从Python创建者Guido van Rossum自己的嘴里完整地阅读。</p>