擅长:python、mysql、java
<p>默认情况下,在类的命名空间中声明的每个函数都假定其第一个参数将是对该类实例的引用。(其他类型的函数用<code>@classmethod</code>和<code>@staticmethod</code>修饰以改变这种假设)这类函数称为方法。按照惯例,Python程序员将第一个参数命名为<code>self</code>,但Python不关心您如何称呼它。调用方法时,必须提供该引用。例如(用<code>self</code>替换为<code>foobar</code>,以证明<code>self</code>不是必需的名称):</p>
<pre><code>class A:
def __init__(foobar):
foobar.x = 5
def somefunc(foobar, y):
print foobar.x + y
a = A()
print A.somefunc(a, 3) # Prints 8
</code></pre>
<p>Python提供了一些语法糖,通过允许您调用绑定方法而不是函数本身,使对象与调用对象的方法之间的链接更加明显。也就是说,<code>a.somefunc(3)</code>和{<cd8>}是等价的。在Python术语中,<code>A.somefunc</code>是一个未绑定的方法,因为它在调用时仍然需要一个实例:</p>
^{pr2}$
<p>相反,<code>a.somefunc</code>被称为绑定方法,因为您已经提供了用作第一个参数的实例:</p>
<pre><code>f = a.somefunc
print f(3)
</code></pre>