"__call__(self,x): return self.foo_method(x)" 的用法及其与 "class.foo_method(x)" 的区别

Usage of "__call__(self,x): return self.foo_method(x)" and its difference to "class.foo_method(x)"

代码源自 python 中从头开始的神经网络实现,如果需要,您可以查看此 link 上的完整代码,并在此处查看有关我的问题的关键部分,我希望python 面向:

class model:
   def __init__(self,blah blah...):
      blah blah

   def forward(self,x):
      blah blah
      return output_of_neural_network

   def __call__(self,x):
      return forward(x)

假设我们要在代码的以下部分中使用 forward 方法...

将 class 作为函数调用的目的是什么,例如model(xtrain) 而不是 model.forward(xtrain)?

当作为函数调用而不是直接应用其方法时,class 对象的实例或变量是否存在任何功能差异?

如您所想,它是完全没有功能差异的纯语法糖。

我想这背后的原因是将您的 Model 视为转换输入数据。这一点,我相信,scikit-learn 选择使用它的 transform 方法,这可以说是不那么模棱两可的。