最近正在看 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()这样的语法,请问这个叫什么?我该在搜什么关键词能找到这个语法?
|      1neoblackcap      2019-04-19 01:53:03 +08:00  1 不就是实现了__call__魔法方法而已 | 
|  |      2Andy00 OP @neoblackcap 感谢大佬,搜到了,搞明白了 | 
|      313d1101      2019-04-19 07:55:02 +08:00 via Android Python 里有“鸭子类型”这个概念,可以学习下 | 
|  |      4arthurblake      2019-04-19 08:03:58 +08:00 还是加强一下基础吧, | 
|      5Gakho      2019-04-19 11:00:44 +08:00  1 如果你多看一下 Python 的文档,你应该会知道 callable object 这个东西 [手动狗头] | 
|      6kneep      2019-04-19 11:17:52 +08:00 via iPhone callable 吧 | 
|  |      7xinXinDaWang      2019-04-19 11:21:05 +08:00 hh.. |