Frage

Ich habe die folgende Basisklasse:

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

Jetzt habe ich eine abgeleitete Klasse mit dem folgenden Code:

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

Aber wenn ich NeuralNetworkBackPropagation instanziiert Ich möchte, dass beide Konstrukteure bekommen called.This ist, will ich nicht die Basisklasse Konstruktor außer Kraft zu setzen. Ist Python Aufruf standardmäßig ist der Basisklassenkonstruktor wenn die abgeleitete Klasse läuft ein? Muss ich es implizit tun in der abgeleiteten Klasse Konstruktor?

War es hilfreich?

Lösung

  

Ist standardmäßig Python Aufruf der Basis   Klasse Konstruktor, wenn der Lauf   abgeleiteten Klasse ein? Muss ich   implizit tun es innerhalb der abgeleiteten   Klassenkonstruktors?

Nein und ja.

Dies ist im Einklang mit der Art und Weise Python anderen überschriebenen Methoden behandelt -. Sie müssen ausdrücklich jede Methode aus der Basisklasse aufrufen, die außer Kraft gesetzt worden ist, wenn Sie diese Funktionalität wollen in der vererbten Klasse verwendet werden

Ihr Konstruktor sollte wie folgt aussehen:

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

Alternativ können Sie Python super Funktion verwenden, um die gleiche Sache zu erreichen, aber müssen Sie vorsichtig sein, wenn es verwendet wird.

Andere Tipps

Sie müssen diese von NeuralNetworkBackPropagation im __init__() Methode setzen, also die __init__() Methode der Elternklasse aufzurufen (NeuralNetworkBase):

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

Der Konstruktor der übergeordneten Klasse wird immer automatisch, wenn Sie überschreiben es in der untergeordneten Klasse. Wenn Sie es in der untergeordneten Klasse überschreiben und wollen auch der Eltern-Klasse Konstruktor aufzurufen, dann musst du es tun, wie ich oben zeigte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top