擅长:python、mysql、java
<p>方法的第一个参数始终是它的实例。在Python中称之为<code>self</code>是惯用的,但这个名称严格按照惯例。你知道吗</p>
<pre><code>class A():
def some_method(me): # not called `self`
print(str(id(me))
a = A()
a.some_method()
print(id(a))
</code></pre>
<p>如果您试图传入另一个任意对象,它必须是第二个参数。你知道吗</p>
<pre><code>class B():
def another_method(self, other):
print(id(other))
b = B()
b.another_method(a)
print(id(b)) # different!
print(id(a)) # the same.
</code></pre>
<hr/>
<p>实际上并不总是这样。<code>@classmethod</code>修饰的方法使用<code>cls</code>作为它们的第一个参数,并且@staticmethod`修饰的方法在默认情况下没有传递给它的第一个参数。你知道吗</p>
<pre><code>class C():
@classmethod
def some_classmethod(cls, other, arguments):
# first argument is not the instance, but
# the class C itself.
@staticmethod
def something_related(other, arguments):
# the first argument gets neither the instance
# nor the class.
</code></pre>