<p>构造类时,定义的方法必须将实例作为第一个参数。类实例被称为<code>self</code>(尽管您可以随意调用它):</p>
<pre class="lang-py prettyprint-override"><code>class X:
def __init__(self, number):
self.number = number
def add_number(self, arg):
self.number += arg
</code></pre>
<p>当您定义<code>__init__</code>时就会看到这一点。所有其他功能都是这样工作的。当你这样称呼他们的时候</p>
<pre class="lang-py prettyprint-override"><code>instance = X(1)
instance.add_number(3)
</code></pre>
<p>这类似于:</p>
<pre class="lang-py prettyprint-override"><code>instance = X(1)
X.add_number(instance, 3)
</code></pre>
<p>它只是针对实例调用方法,将自动为您传递<code>self</code>。在实例内调用该方法时,需要指定要调用的实例,只是调用<code>self</code>而不是<code>instance</code>:</p>
<pre class="lang-py prettyprint-override"><code>class X:
~snip~
def add_number(self, arg):
self.number += arg
def increment_number(self):
# note the self.<method>
self.add_number(1)
</code></pre>
<p>同样,这与调用相同:</p>
<pre class="lang-py prettyprint-override"><code>instance = X(1)
X.increment_number(instance)
</code></pre>
<p>因为<code>instance</code>被传入,因此可以使用适当的方法调用它</p>
<p>*未用<code>@staticmethod</code>或<code>@classmethod</code>修饰的所有其他函数</p>