どのようにクラスのコンストラクタはPythonで働く得ていますか?
-
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をインスタンス化するとき、私は両方のコンストラクタは、私は、基本クラスのコンストラクタを上書きしたくない、called.Thisがあり得ることをしたいと思います。デフォルトでは、Pythonの呼び出しを行い、基本クラスのコンストラクタの派生クラスのいずれかを実行していますか?私は、暗黙的に派生クラスのコンストラクタの内部でそれをしなければならないのですか?
解決
デフォルトベースでのpythonコールをい クラスのコンストラクタの実行中 派生クラスの1?私はしなければいけないですか 暗黙的に派生の内側にそれを行います クラスのコンストラクタ?
はありません、はいています。
これは、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
の機能を使用することができ、しかしあなたはそれをに使用する場合は注意する必要があります。
他のヒント
あなたはNeuralNetworkBackPropagationの__init__()
方法でこれを配置する必要があります、それは親クラス(NeuralNetworkBase)の__init__()
メソッドを呼び出すことです。
NeuralNetworkBase.__init__(self, numberOfInputs, numberOfHiddenNeurons, numberOfOutputs)
親クラスのコンストラクタは、常にあなたが子クラスでそれを上書きしない限り、自動的に呼び出されます。あなたは子クラスでそれを上書きし、同様に親のクラスのコンストラクタを呼び出したい場合は、私が上記示したように、そしてあなたがそれを行う必要があるでしょう。