首页 > 解决方案 > 在不使用 class.function() 的情况下访问 Python 中的类中的函数?

问题描述

我在神经网络教程中遇到了以下代码。以下几行正常工作,尽管它们与我对 Python 类的知识相矛盾。

class Net(nn.Module):
    def __init__(self):
      super(Net, self).__init__()
      self.fc1 = nn.Linear(28 * 28, 200)
      self.fc2 = nn.Linear(200, 200)
      self.fc3 = nn.Linear(200, 10)

  def forward(self, x):
      x = F.relu(self.fc1(x))
      x = F.relu(self.fc2(x))
      x = self.fc3(x)
      return F.log_softmax(x)


net = Net()
net_out = net(data)

这里有一些data被传进去net.forward()并被forward()处决。

但是,据我所知,我们必须使用net.forward(data)而不是net(data)才能向前访问该功能。因此,谁能告诉我为什么我们可以forward()在不提及函数名称的情况下访问?是否有某种规则允许我们在不使用的情况下访问类中的函数class_name.function_name

标签: pythonneural-network

解决方案


Python有一组“神奇”的方法,您可以覆盖它们以更新对象的行为。在这种特殊情况下,实现的一种方法net_out = net(data)是覆盖__call__函数,您可以在一篇文章中查看。

我想覆盖发生在nn.Module. 类似于以下内容:

class Module:
    ...
    def __call__(self, arg):
        self.forward(arg)
    ...         

推荐阅读