2016-06-16 21 views
1

Ich möchte den Wert einer inneren Klasse festlegen und aus einer beliebigen Klasse aufrufen. Ich benutze das Gleiche für die (äußere) Klasse, der Wert wird in der Menge def geändert, aber außerhalb dieser Funktion springt sie wie nicht geändert wurde.So rufen Sie eine Variable einer inneren Klasse korrekt auf

mein Code sieht wie folgt aus

class car(vehicle): 
    __vehicle_kind = "car" 
    __nb_of_wheels = 4 
    __nb_of_doors = 2 

    def showKind(self): 
     return self.__vehicle_kind 

    def showNbOfWheels(self): 
     return self.__nb_of_wheels 

    def showNbOfDoors(self): 
     return self.__nb_of_doors 

    class wheels(vehicle): 
     wheel_color = "grey" 
     wheel_diametre = "16" 

     def setWheelColor(self, color): 
      self.wheel_color = color 
      print self.wheel_color 

     def showWheelColor(self): 
      return self.wheel_color 

I gesetzt und rufen Sie die showWheelColor mit:

new.wheels().setWheelColor(wheel_color) 
print new.wheels().showWheelColor() 

aber die Show gibt den alten Wert. Wie funktioniert das richtig?

+0

Beginnen Sie, indem Sie nicht an "private" wie alles in Python denken. –

+0

Sowohl "Räder" als auch "Auto" sind Ableitungen von "Fahrzeug", was für mich keinen Sinn ergibt. Könnten Sie entweder Code für die Fahrzeugklasse geben oder Ihre Logik dahinter erläutern (Wie sind Räder ein Fahrzeug?) –

Antwort

0

Ihr Beispiel hat ein paar Probleme. Das Hauptproblem ist, dass Sie Klassen- und Instanzvariablen/Member verwechseln. ist eine Klassenvariable, die für alle Instanzen von wheel gilt, während sich self.wheel_color = color auf eine Instanzvariable bezieht, die nur für diese bestimmte Instanz gilt. Diese zusätzlich zu der Tatsache,

dass wird eine neue Instanz bieten jedes Mal, es genannt würden Sie zuerst eine neue Instanz von wheels nehmen und setzen Sie ihn wheel_color ist und dann eine weitere Instanz erstellen und überprüfen es ist wheel_colors, aber da Sie nicht Setzen Sie die Instanzvariable auf diesem Python würde zurück greifen auf die Klassenvariable zu überprüfen - die immer noch "grey"

Verwandte Themen