python - 在不使用 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
?
解决方案
Python
有一组“神奇”的方法,您可以覆盖它们以更新对象的行为。在这种特殊情况下,实现的一种方法net_out = net(data)
是覆盖__call__
函数,您可以在另一篇文章中查看。
我想覆盖发生在nn.Module
. 类似于以下内容:
class Module:
...
def __call__(self, arg):
self.forward(arg)
...
推荐阅读
- python - 如何将信息从 Python 代码传递到 Web 信息显示?
- ios - 如何通过 iOS 中的键盘扩展更改文本字段中的字体输出
- c - 计算字符串中的一个字符 (C) - 问题
- vue.js - 用于 nuxt.js 构建的自定义 index.html
- javascript - useState 更新状态子数组对象不起作用
- android - 为什么网络蓝牙配对屏幕显示同一设备的多个条目?
- reactjs - 如何知道 React Bootstrap 模式何时加载?
- php - 使用一个提交按钮更新多个 MYSQL 行
- r - dplyr 中的 filter() 如何评估自定义函数中 () 中的内容?
- r - 如何从 R 项目中删除脚本