我有以下的基类:

class NeuralNetworkBase:
    def __init__(self, numberOfInputs, numberOfHiddenNeurons, numberOfOutputs):
        self.inputLayer = numpy.zeros(shape = (numberOfInputs))
        self.hiddenLayer = numpy.zeros(shape = (numberOfHiddenNeurons))
        self.outputLayer = numpy.zeros(shape = (numberOfOutputs))

        self.hiddenLayerWeights = numpy.zeros(shape = (numberOfInputs, numberOfHiddenNeurons))
        self.outputLayerWeights = numpy.zeros(shape = (numberOfHiddenNeurons, numberOfOutputs))

现在,我有用下面的代码派生类:

class NeuralNetworkBackPropagation(NeuralNetworkBase):
    def __init__(self, numberOfInputs, numberOfHiddenNeurons, numberOfOutputs):
        self.outputLayerDeltas = numpy.zeros(shape = (numberOfOutputs))
        self.hiddenLayerDeltas = numpy.zeros(shape = (numberOfHiddenNeurons))

但是,当我实例NeuralNetworkBackPropagation我想这两个构造得到called.This是,我不希望重写基类的构造函数。默认情况下,是否蟒蛇调用运行派生类之一,当基类构造函数的?我一定要含蓄地做到这一点的派生类的构造函数里面?

有帮助吗?

解决方案

  

默认基座是否蟒呼叫   类的构造函数运行时的   派生类的吗?我一定要吗   含蓄做这里面派生   类的构造函数?

没有与肯定的。

这是与Python处理其他重载方法的方式是一致的 - 你必须显式调用从一个已经如果你想在继承的类中使用该功能覆盖了基类的任何方法

您应该构造看起来是这样的:

def __init__(self, numberOfInputs, numberOfHiddenNeurons, numberOfOutputs):
    NeuralNetworkBase.__init__(self, numberOfInputers, numberOfHiddenNeurons, numberOfOutputs)
    self.outputLayerDeltas = numpy.zeros(shape = (numberOfOutputs))
    self.hiddenLayerDeltas = numpy.zeros(shape = (numberOfHiddenNeurons))

另外,你可以使用Python的 super 函数来实现同样的事情,但你需要用它时要小心。

其他提示

您将必须把这个NeuralNetworkBackPropagation的__init__()方法,即调用父类(NeuralNetworkBase)的__init__()方法:

NeuralNetworkBase.__init__(self, numberOfInputs, numberOfHiddenNeurons, numberOfOutputs)

父类的构造函数总是被自动调用,除非你覆盖它的子类。如果您在子类覆盖它,想调用父的类的构造函数和,那么你就必须这样做,因为我上面显示。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top