2013-11-15 6 views
21

Ich schreibe ein Programm, das mehrere Klassen verwendet. Ich habe eine Klasse, die dazu dient, Werte für eine Menge von Variablen zu bestimmen. Ich möchte dann auf die Werte dieser Variablen mit anderen Klassen zugreifen können. Mein Code sieht wie folgt aus:Wie würde ich auf Variablen von einer Klasse zur anderen zugreifen?

class ClassA(object): 
    def __init__(self): 
     self.var1 = 1 
     self.var2 = 2 

    def methodA(self): 
     self.var1 = self.var1 + self.var2 
     return self.var1 


class ClassB(ClassA): 
    def __init__(self): 
     self.var1 = ? 
     self.var2 = ? 

object1 = ClassA() 
sum = object1.methodA() 
print sum 

Ich verwende classA, um 2 Variablen (var1 und var2) zu initialisieren. Ich verwende dann methodA, um sie hinzuzufügen, das Ergebnis als var1 zu speichern (ich denke, das wird var1 = 3 und var2 = 2). Was ich wissen möchte ist, wie hätte ich ClassB dann in der Lage sein, die Werte für var1 und var2 von ClassA zu bekommen?

Antwort

29

var1 und var2 sind instance variables. Das bedeutet, dass Sie die Instanz von ClassA zu ClassB, um senden für ClassB es zugreifen, das heißt:

class ClassA(object): 
    def __init__(self): 
     self.var1 = 1 
     self.var2 = 2 

    def methodA(self): 
     self.var1 = self.var1 + self.var2 
     return self.var1 



class ClassB(ClassA): 
    def __init__(self, class_a): 
     self.var1 = class_a.var1 
     self.var2 = class_a.var2 

object1 = ClassA() 
sum = object1.methodA() 
object2 = ClassB(object1) 
print sum 

Auf der anderen Seite - wenn Sie class variables verwenden waren, Sie var1 und var2 zugreifen konnte ohne Absenden object1 als Parameter für ClassB.

class ClassA(object): 
    var1 = 0 
    var2 = 0 
    def __init__(self): 
     ClassA.var1 = 1 
     ClassA.var2 = 2 

    def methodA(self): 
     ClassA.var1 = ClassA.var1 + ClassA.var2 
     return ClassA.var1 



class ClassB(ClassA): 
    def __init__(self): 
     print ClassA.var1 
     print ClassA.var2 

object1 = ClassA() 
sum = object1.methodA() 
object2 = ClassB() 
print sum 

Beachten Sie jedoch, dass Klassenvariablen unter allen Instanzen der Klasse gemeinsam genutzt werden.

+0

Dies sieht aus wie es für mich funktioniert! Ich werde mit herum spielen es, aber ich denke, ich verstehe es jetzt. Vielen Dank! – user2714543

5

Können Sie erklären, warum Sie dies tun möchten?

Sie spielen um mit Instanzvariablen/Attribute, die von einer Klasse zur anderen nicht migriert werden (sind sie nicht einmal zu ClassA gebunden, sondern an eine bestimmte Instanz von ClassA, die Sie, wenn Sie erstellt schrieb ClassA()). Wenn Sie in einer Klasse zeigen sich in einen anderen haben Änderungen möchten, können Sie können Verwendung Klassenvariablen:

class ClassA(object): 
    var1 = 1 
    var2 = 2 
    @classmethod 
    def method(cls): 
     cls.var1 = cls.var1 + cls.var2 
     return cls.var1 

In diesem Szenario wird ClassB die Werte auf ClassA von Vererbung abholen. Sie können dann die Klassenvariablen Zugriff über ClassA.var1, ClassB.var1 oder sogar von einer Instanz ClassA().var1 (vorausgesetzt, Sie haben keine Instanz Methode var1 hinzugefügt, die vor der Klassenvariable in Attribut-Lookup aufgelöst werden.

Ich habe zu weiß ein wenig mehr über Ihren speziellen Anwendungsfall, bevor ich weiß, ob das eine Vorgehensweise ist, die ich tatsächlich empfehlen würde ...

+2

Ich mache es nur für die Praxis wirklich. Ich versuche, mich selbst zu unterrichten, und bei der Arbeit mit Clas Das war eine Frage, die ich hatte. Ich suchte herum und konnte die anderen Antworten nicht wirklich verstehen. Ich dachte, ich würde es versuchen. Ich denke, ich habe jetzt den Dreh raus! Vielen Dank! – user2714543

1
class ClassA(object): 
    def __init__(self): 
     self.var1 = 1 
     self.var2 = 2 
    def method(self): 
     self.var1 = self.var1 + self.var2 
     return self.var1 

class ClassB(ClassA): 
    def __init__(self): 
     ClassA.__init__(self) 

object1 = ClassA() 
sum = object1.method() 
object2 = ClassB() 
print sum 
Verwandte Themen