在类中调用 self 有什么作用?

Dan*_* S. 1 python pytorch pytorch-lightning

我注意到 Pytorch Lightning 的文档中提到,您可以通过调用self(x). 我无法找到任何有关其工作原理的信息。我一直以为你会使用调用该方法self.forward

显然,它调用了forward方法,但是如何调用呢?有没有关于正在发生的事情的 python 文档?

我在以下网址找到了这个: https://pytorch-lightning.readthedocs.io/en/stable/new-project.html

具体代码片段是这样的:

def training_step(self, batch, batch_idx):
    ...
    z = self(x)
Run Code Online (Sandbox Code Playgroud)

Sha*_*hai 5

一般来说,在Python中,当“调用”一个对象时,你正在调用它的__call__方法。那是,

  self(x)
Run Code Online (Sandbox Code Playgroud)

相当于

  self.__call__(x)
Run Code Online (Sandbox Code Playgroud)

对于pytorch nn.Module(以及所有衍生类)来说__call__,包装了模块的forward功能,因此,从你的角度来看self(x),基本上是x通过模块进行转发self