参考 : python中两个括号连用: 类名后两个括号-CSDN博客
学习时遇到如下代码, 两个括号连用 :
class EWiseAdd(TensorOp):
def compute(self, a: NDArray, b: NDArray):
return a + b
def gradient(self, out_grad: Tensor, node: Tensor):
return out_grad, out_grad
def add(a, b):
return EWiseAdd()(a, b) // <----
解释如下 :
- 链式调用 : 函数的返回值仍是个函数, 就可能出现两个括号连用的情况 ;
- 对象自调用 : 第一个括号为从类创建对象, 第二个括号为对象调用自己的
__call__
函数__call__
方法可以继承 ;- 如果在当前类找不到, 就去父类找 (也就是上例中的情况) ;