我有这段代码:

class InputLayer():
    def __init__(self):
        print('Test')

class Model():

    layer_type_map = {
        'input_layer': InputLayer
    }

    def __init__(self, architecture):

        for layer in architecture:

            layer_class = self.layer_type_map[list(layer.keys())[0]]
            layer_class()


我的问题是:在倒数第二行中,为什么我需要放self.

我将实例化为:

layer0 = {'input_layer': {'input_shape': input_shape}}
layer1 = {'fc_layer': {'num_nodes' : 5}}
layer2 = {'output_layer': {'num_outputs' : 10}}

architecture = [layer0, layer1, layer2]

mynet = Model(architecture)


如果我正确使用了代码,则layer_type_map[list(layer.keys())[0]]的值是InputLayer,但是InputLayer不是Model类的方法。为什么这样做?

我是关于类和对象的新手,但是我想这是一种处理事情的方式,是“分派器”。我对吗?

最佳答案

我的问题是:在倒数第二行,为什么我需要自我介绍?


由于layer_type_mapModel的属性,因此您需要在需要访问时引用它,方法是使用Model实例指定它,并使用self


  如果我正确使用代码,则
  layer_type_map [list(layer.keys())[0]]是InputLayer,但InputLayer是
  不是Model类的方法。为什么这样做?


InputLayer不是Model的方法,但是在

layer_type_map = {
    'input_layer': InputLayer
}


由于在倒数第二行中,您已调用self.layer_type_map[list(layer.keys())[0],所以您将获得layer_type_map['input_layer']的值,即class InputLayer。然后通过调用layer_class()实例化它

这就是为什么您的代码有效的原因:D我还没有尝试过,但这是我的简要说明。希望有帮助

09-11 17:18