문제

다음과 같은 기본 클래스가 있습니다.

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을 인스턴스화하면 두 생성자가 모두 호출되기를 원합니다. 이것이 기본 클래스의 생성자를 무시하고 싶지 않습니다. 파이썬은 기본적으로 기본 클래스 생성자가 파생 된 클래스를 실행할 때 호출합니까? 파생 클래스 생성자 내부에서 암시 적으로 수행해야합니까?

도움이 되었습니까?

해결책

파이썬은 기본적으로 기본 클래스 생성자가 파생 된 클래스를 실행할 때 호출합니까? 파생 클래스 생성자 내부에서 암시 적으로 수행해야합니까?

아니요.

이는 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을 사용할 수 있습니다 super 같은 것을 달성하기 위해 기능하지만 사용할 때주의해야합니다.

다른 팁

당신은 이것을 다음에 넣어야합니다 __init__() NeuralnetworkBackPropagation의 방법, 즉 __init__() 부모 클래스의 방법 (Neuralnetworkbase) :

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

부모 클래스의 생성자는 아동 클래스에서 덮어 쓰지 않으면 항상 자동으로 호출됩니다. 아동 수업에서 덮어 쓰고 부모의 클래스 생성자에게도 전화를 걸려면 위에서 보여 주듯이해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top