最近正在看 PyTorch,在 PyTorch 里看到了一种写法感觉很酷,但有点疑惑,遂来请教,感谢各位大佬答疑
在创建 PyTorch 的模型时会定义一个 class,这里是我抄来的代码:
class Encoder(nn.Module):
def __init__(
self,
n_src_vocab, len_max_seq, d_word_vec,
n_layers, n_head, d_k, d_v,
d_model, d_inner, dropout=0.1):
super().__init__()
# 具体的函数逻辑我就删掉了,应该没有什么关系
def forward(self, src_seq, src_pos, return_attns=False):
# 具体的函数逻辑我就删掉了,应该没有什么关系
return enc_output,
然后在另外的函数里初始化了这个类,给对象传入参数,代码如下:
encoder = Encoder(参数)
encoder(input_data)
按照我的理解这里在调用 encoder 时就相当于调用了 forward 函数,但是不需要用encoder.forward()
这样的语法,请问这个叫什么?我该在搜什么关键词能找到这个语法?
1
neoblackcap 2019-04-19 01:53:03 +08:00 1
不就是实现了__call__魔法方法而已
|
2
Andy00 OP @neoblackcap 感谢大佬,搜到了,搞明白了
|
3
13d1101 2019-04-19 07:55:02 +08:00 via Android
Python 里有“鸭子类型”这个概念,可以学习下
|
4
yph007595 2019-04-19 08:03:58 +08:00
还是加强一下基础吧,
|
5
Gakho 2019-04-19 11:00:44 +08:00 1
如果你多看一下 Python 的文档,你应该会知道 callable object 这个东西 [手动狗头]
|
6
kneep 2019-04-19 11:17:52 +08:00 via iPhone
callable 吧
|
7
xinXinDaWang 2019-04-19 11:21:05 +08:00
hh..
|