最近正在看 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 ![]() 不就是实现了__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 ![]() 如果你多看一下 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.. |