首页 > 解决方案 > 班级内的调度员

问题描述

我有这段代码:

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]]InputLayerInputLayer不是Model该类的方法。为什么这行得通?

我是关于类和对象的新手,但我想这是一种处理事物的方式是“调度程序”。我对吗?

标签: pythondispatcher

解决方案


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

因为layer_type_map是 的一个属性Model,所以您需要在想要访问时引用它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()

这就是您的代码有效的原因:DI 还没有尝试过,但这是我的简要解释。希望这有帮助


推荐阅读