本文介绍了派生类构造函数如何在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 =(numberOfHidde nb)

但是当我实例化NeuralNetworkBackPropagation时,我希望两个构造函数都被调用。我不想重写基类的构造函数。在运行派生类的类时,python默认情况下是否调用基类的构造函数?

解决方案

否,是吗? p>

这与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的函数实现相同的功能THI ng,但是。


I have the following base class:

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))

now, I have a derived class with the following code:

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

But when I instantiate NeuralNetworkBackPropagation I'd like that both constructors get called.This is, I don't want to override the base class' constructor. 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?

解决方案

No and yes.

This is consistent with the way Python handles other overridden methods - you have to explicitly call any method from the base class that's been overridden if you want that functionality to be used in the inherited class.

Your constructor should look something like this:

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

Alternatively, you could use Python's super function to achieve the same thing, but you need to be careful when using it.

这篇关于派生类构造函数如何在python中工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-05 09:11
查看更多