سؤال

لدي الطبقة الأساسية التالية:

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))

ولكن عندما أقوم بإرساء networkbackbropagation neuralnetworkbropagation، أود أن يسمى كل من المنشئين. هذا، لا أريد أن أتجاوز منشئ الطبقة الأساسية. هل دعوة بيثون افتراضيا منشئ الفئة الأساسية عند تشغيل الفئة المشتقة "واحد؟ هل يجب علي أن أفعل ذلك ضمنيا داخل منشئ الطبقة المشتقة؟

هل كانت مفيدة؟

المحلول

هل دعوة بيثون افتراضيا منشئ الفئة الأساسية عند تشغيل الفئة المشتقة "واحد؟ هل يجب علي أن أفعل ذلك ضمنيا داخل منشئ الطبقة المشتقة؟

لا ونعم.

هذا متسق مع الطريقة التي يتعامل بها 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))

بدلا من ذلك، يمكنك استخدام بيثون super وظيفة لتحقيق نفس الشيء، ولكن تحتاج إلى أن تكون حذرا عند استخدامه.

نصائح أخرى

سوف تضطر إلى وضع هذا في __init__() طريقة nearentworkbackpropagation، وهذا هو الاتصال __init__() طريقة الطبقة الأصل (NeuralNetworkbase):

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

يتم استدعاء منشئ الطبقة الأصل دائما تلقائيا إلا إذا قمت بالكتابة فوقه في فئة الطفل. إذا قمت بالكتابة فوقه في فئة الطفل وتريد استدعاء منشئ الطبقة الأصل أيضا، فسيتعين عليك القيام بذلك كما أظهرت أعلاه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top