Pregunta

Tengo la siguiente clase base:

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

ahora, tengo una clase derivada con el código siguiente:

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

Pero cuando instanciar NeuralNetworkBackPropagation me gustaría que los dos constructores reciben called.This es, no quiero para anular el constructor de la clase base. Hace llamada pitón por defecto la clase de constructor base cuando se ejecuta la clase derivada uno? ¿Tengo que hacer implícitamente dentro del constructor de la clase derivada?

¿Fue útil?

Solución

  

funciona la llamada pitón por defecto de la base   de cuando se ejecuta el constructor de la clase   clase derivada uno? Tengo que   implícitamente hacerlo dentro de la derivada   constructor de la clase?

No y sí.

Esto es consistente con la forma en Python maneja otros métodos sobrescritos -. Usted tiene que llamar explícitamente a cualquier método de la clase base que ha sido invalidada si se quiere que la funcionalidad que se utilizará en la clase heredada

Su constructor debe ser algo como esto:

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

Como alternativa, se puede usar super función de Python para lograr la misma cosa, pero que hay que tener cuidado cuando se utiliza .

Otros consejos

Usted tendrá que poner esto en el método de __init__() NeuralNetworkBackPropagation, que es llamar al método __init__() de la clase padre (NeuralNetworkBase):

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

El constructor de la clase padre siempre se llama automáticamente a menos que sobrescribe en la clase de niño. Si sobrescribe en la clase del niño y desea llamar constructor de la clase de los padres, así, entonces usted tiene que hacerlo como he mostrado anteriormente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top