派生类构造函数在python中如何工作?

2024-05-18 06:33:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下基类:

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时,我希望两个构造函数都被调用,也就是说,我不想重写基类的构造函数。在运行派生类“one”时,python是否默认调用基类构造函数?我必须隐式地在派生类构造函数中进行吗?


Tags: selfnumpyinitdefzeros基类classshape
2条回答

您必须将其放入NeuralNetworkBackPropagation的__init__()方法中,即调用父类(NeuralNetworkBase)的__init__()方法:

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

父类的构造函数总是自动调用的,除非您在子类中覆盖它。如果您在子类中覆盖它,并且还想调用父类的类构造函数,那么您必须按照我上面所示的那样执行。

Does python call by default the base class constructor's when running the derived class' one? Do I have to implicitly do it inside the derived class constructor?

不,是的。

这与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的^{}函数来实现相同的功能,但是you need to be careful when using it

相关问题 更多 >