Pergunta

Eu tenho a seguinte classe 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))

Agora, eu tenho uma classe derivada com o seguinte código:

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

Mas quando eu instanciar NeuralNetworkBackPropagation eu gostaria que ambos os construtores obter called.This é, eu não quero substituir o construtor da classe base. Faz apelo python por padrão, o construtor da classe base está ao executar a classe derivada? Eu tenho que fazê-lo implicitamente dentro do construtor da classe derivada?

Foi útil?

Solução

põe python por padrão a base construtor da classe é durante a execução do classe derivada one? Eu tenho que implicitamente fazê-lo dentro do derivado construtor da classe?

Não e sim.

Isto é consistente com a maneira Python lida com outros métodos de substituição -. Você tem que chamar explicitamente qualquer método da classe base que tem sido substituído, se você quiser que a funcionalidade para ser usado na classe herdada

Seu construtor deve ser algo como isto:

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, você poderia usar href="http://docs.python.org/library/functions.html#super" rel="noreferrer"> super função do Python para conseguir a mesma coisa, mas você precisa ter cuidado ao usá-lo .

Outras dicas

Você vai ter que colocar isso no método __init__() de NeuralNetworkBackPropagation, que é chamar o método __init__() da classe pai (NeuralNetworkBase):

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

O construtor da classe pai sempre é chamado automaticamente, a menos que você substituí-lo na classe infantil. Se você substituí-lo na classe infantil e deseja chamar construtor da classe do pai, bem, então você vai ter que fazê-lo como eu mostrei acima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top