5.22 如何实现函数的连续调用? ============================= .. image:: http://image.iswbm.com/20200804124133.png 现在我想写一个函数可以实现把所有的数进行求和,并且可以达到反复调用的目的。 比如这样子。 .. code:: python >>> add(2)(3)(4)(5)(6)(7) 27 当只调用一次时,也必须适用。 .. code:: python >>> add(2) 2 每次调用的返回结果都是一个 int 类型的实例,要实现将一个实例看做一个函数一样调用,那就不得不使用到 ``__call__`` 这个魔法方法。 .. code:: python >>> class AddInt(int): ... def __call__(self, x): ... print("calling __call__ function") ... return AddInt(self.numerator + x) ... >>> >>> age = AddInt(18) >>> age 18 >>> age(1) calling __call__ function 19 有了上面的铺垫,可以在 AddInt 外层再加一层封装即可。 .. code:: python >>> def add(x): ... class AddInt(int): ... def __call__(self, x): ... return AddInt(self.numerator + x) ... return AddInt(x) ... >>> add(2) 2 >>> add(2)(3)(4)(5)(6)(7) 27 >>>