我有一段代码:
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_map
是Model
的一个属性,所以您需要在需要访问它时引用它,方法是使用self
指定一个Model
的实例InputLayer
不是Model
的方法,但它是在因为在倒数第二行中,调用了
self.layer_type_map[list(layer.keys())[0]
,得到了layer_type_map['input_layer']
的值,即class InputLayer
。然后通过调用layer_class()
来实例化它这就是为什么你的代码工作:D我还没有尝试过,但这是我的简短解释。希望这有帮助
您需要在代码中使用
self
,因为layer_type_map
是一个类变量。我想剩下的代码只是把你弄糊涂了。您可以用一个更简单的例子来演示self
在这种情况下的用法:代码中的
self
用于查找self.layer_type_map
,这是一个字典。对字典所做的索引(最终得到InputLayer
)与变量查找无关,变量查找首先发生。在定义InputLayer
类时,会在全局命名空间中查找该类,并将对该类的引用放入字典中。你知道吗相关问题 更多 >
编程相关推荐