擅长:python、mysql、java
<p>在Python中,函数是一类对象,这意味着:函数引用可以在其他函数和/或方法的输入中传递,并从它们内部执行。</p>
<p><em>类的实例</em>(aka Objects)可以视为函数:将它们传递给其他方法/函数并调用它们。为了实现这一点,必须专门化<code>__call__</code>类函数。</p>
<p><code>def __call__(self, [args ...])</code>
它接受可变数量的参数作为输入。假设<code>x</code>是类<code>X</code>的实例,<code>x.__call__(1, 2)</code>类似于调用<code>x(1,2)</code>或<strong>实例本身作为函数</strong>。</p>
<p>在Python中,<code>__init__()</code>被正确定义为类构造函数(而<code>__del__()</code>是类析构函数)。因此,在<code>__init__()</code>和<code>__call__()</code>之间有一个净的区别:第一个构建类up的实例,第二个使这样的实例可以作为函数调用,而不会影响对象本身的生命周期(即<code>__call__</code>不会影响构造/销毁生命周期),但是它可以修改其内部状态(如如下所示)。</p>
<p>例如。</p>
<pre><code>class Stuff(object):
def __init__(self, x, y, range):
super(Stuff, self).__init__()
self.x = x
self.y = y
self.range = range
def __call__(self, x, y):
self.x = x
self.y = y
print '__call__ with (%d,%d)' % (self.x, self.y)
def __del__(self):
del self.x
del self.y
del self.range
>>> s = Stuff(1, 2, 3)
>>> s.x
1
>>> s(7, 8)
__call__ with (7,8)
>>> s.x
7
</code></pre>