파생 클래스 생성자는 파이썬에서 어떻게 작동합니까?
-
19-09-2019 - |
문제
다음과 같은 기본 클래스가 있습니다.
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)
부모 클래스의 생성자는 아동 클래스에서 덮어 쓰지 않으면 항상 자동으로 호출됩니다. 아동 수업에서 덮어 쓰고 부모의 클래스 생성자에게도 전화를 걸려면 위에서 보여 주듯이해야합니다.
제휴하지 않습니다 StackOverflow