我有以下基类:
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 在运行派生类时默认调用基类构造函数吗?我是否必须在派生类构造函数中隐式执行此操作?
python默认调用base吗
运行时的类构造函数
派生类'一?我一定要吗
在派生中隐式执行此操作
类构造函数?
不,又是。
这与 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 http://docs.python.org/library/functions.html#super函数来实现同样的事情,但是使用时需要小心 http://fuhm.net/super-harmful/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)