2016-05-26 9 views
1

ich den folgenden Code haben, wo ich folgendes erreichen will: Verstehen Sie bitte, ich bin ein Neuling in OOP 1) Initialisieren „Klasse B“ aus dem HauptfunktionWie kann man auf Variablen von der geerbten Elternklasse in Python zugreifen?

2) Vererben „Klasse A“ von „Klasse B "und in Abhängigkeit von einigen Bedingungen von Variablen der" Klasse A "Aufruf" Klasse D "innerhalb von" Klasse B "

3) Nach Aufruf von" Klasse D "Variablen aus" Klasse A "verwenden, um sie zu ändern und zu drucken es aus.

4) Gehen Sie danach zurück zu "Klasse B", um den Code für weitere Bedingungen auszuführen.

`` `

class A(object): 
     def __init__(self): 
      super(A,self).__init__() 
      self.A_var = 0 
      print('Running A.__init__') 
    class B(A): 
     def __init__(self): 
      super(B,self).__init__() 
      #B.__init__(self) 

     def fun2(): 
      self.A_var += 5 
      #foo = D() 
      self.fun1 
      print('Running B.__init__') 
      print self.A_var   

      #A.__init__(self) 


    class D(B,A): 
     def __init__(self): 
      #super(A,grandfather).__init__() 
      #A.__init__(grandfather) 
      super(D,self).__init__() 
      #D.__init__(self) 
     def fun1(): 
      print('Running D.__init__') 
      self.A_var += 400 
      print self.A_var 


    if __name__ == '__main__': 
     b = B() 
     b.fun2 

` ``

Ich möchte aus dem Wert von "self.A_var" von innen "Klasse D"

+0

Was ist Ihre Frage? – barny

+0

@barny Ich möchte es "self.A_var" ausdrucken, aber es gibt mir nicht die erforderliche Ausgabe, stattdessen gibt es "Running A .__ init__" als Ausgabe. –

Antwort

0

Sie haben drucken nicht verstanden, was Vererbung ist. Eine Instanz von D ist eine Instanz von A und B, weil sie von ihnen erbt. Das einzige, was Sie tun müssen, ist sicherzustellen, dass Sie super() in jeder __init__ Methode aufrufen; Aus irgendeinem Grund hast du den in D mit dem total falschen D.__init__ ersetzt, der endlos rekrutieren wird. Setzen Sie zurück super(D,self).__init__().

Die einzige andere Änderung ist, die sinnlose Instanziierung von D innerhalb B.fun2 zu entfernen; rufen Sie einfach self.fun1() dort an.

+0

Ich bekomme immer noch nicht die erforderliche Ausgabe der Ausgabe der "self.A_var", wie gehe ich darüber, stattdessen bekomme ich gerade A .__ init__ als outpur, bitte antworten. Danke für das Verständnis, ich bin ein Neuling in OOP in Python. –

0

, wenn Sie den Wert von "self.A_var" von innen "Klasse D" drucken mögen als ausführen: d.fun1() Kasse dieses modifizierte Code:

class A(object): 
    def __init__(self): 
     super(A, self).__init__() 
     self.A_var = 0 
     print('Running A.__init__') 


class B(A): 
    def __init__(self): 
     super(B, self).__init__() 

    def fun2(self): 
     self.A_var += 5 
     print ('Running B.__init__'), self.A_var 


class D(B): 
    def __init__(self): 
     super(D, self).__init__() 

    def fun1(self): 
     self.A_var += 400 
     print ('Running D.__init__'), self.A_var 


if __name__ == '__main__': 
    d = D() 
    d.fun2() 
    d.fun1() 

mit dieser Code-Ausgabe ist

Running A.__init__ 
Running B.__init__ 5 
Running D.__init__ 405 
+0

Kannst du auch sagen, wie kann ich "Klasse D" innerhalb von "Klasse B" nennen, d. H. Innerhalb von "fun2" abhängig von einer Bedingung. Danke auch für die Antwort. –

+0

@RishabhGupta bitte lassen Sie mich Ihre Bedingung löschen, was genau Sie nach dem Aufruf der Klasse D in Klasse B Fun2-Funktion tun möchten. und wenn Sie Klasse D in Klasse B aufrufen, erhalten Sie - RuntimeError: Maximale Rekursionstiefe beim Aufruf eines Python-Objekts überschritten. –

+0

Laut mir sollte dies der Ablauf des Programms sein: 1) Das Hauptprogramm sollte "Klasse B" aufrufen "die Klasse A und alle ihre Attribute/Variablen erben muss. 2) Abhängig vom Status einer Variablen der "Klasse A" sollte "Klasse B" "Klasse D" aufrufen, die alle Variablen "Klasse A" und "Klasse B" haben muss 3) Danach Code muss zu "Klasse B" zurückkehren, so dass ich zusätzliche Bedingungen überprüfen kann, um ähnliche Klassen zu "Klasse D" innerhalb von "Klasse B" aufzurufen Danke, dass Sie mir geholfen haben. –