2013-11-15 118 views
21

我在寫一個正在使用多個類的程序。我有一個專門用於確定一組變量值的類。然後我想能夠訪問其他類的變量的值。我的代碼如下所示:我將如何從一個類訪問變量到另一個類?

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 

我使用classA初始化2個變量(var1和var2)。然後我使用methodA添加它們,將結果保存爲var1(我認爲這會使var1 = 3和var2 = 2)。我想知道的是,如何讓ClassB能夠從ClassA中獲取var1和var2的值?

回答

29

var1var2instance variables。這意味着,你必須的ClassA實例發送到ClassB爲了ClassB的訪問它,即:

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 

在另一方面 - 如果你使用class variables,你可以訪問VAR1和VAR2不發送object1作爲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 

但是請注意,類變量在其類的所有實例之間共享。

+0

這看起來像它適用於我!我打算玩但是我想現在我明白了,非常感謝! – user2714543

5

你能解釋一下爲什麼你想這樣做?

你玩弄實例變量/屬性,不會從一類遷移到另一個(他們勢必不會甚至ClassA,而是一個特定的實例ClassA您創建當你寫了​​)。如果你想在另一個,你可以使用類變量在一個類中顯示了變化:

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

在這種情況下,ClassB會拿起ClassA從繼承的值。您可以然後通過ClassA.var1ClassB.var1甚至從一個實例ClassA().var1(前提是您沒有添加一個實例方法var1將在屬性查找類變量之前解決訪問類變量。

我不得不知道更多關於你的特定用例之前,我知道這是一個行動,我會實際上建議,雖然...

+2

我只是在爲實踐而努力,我正在努力教自己,在和clas一起工作時這是我的問題。我四處搜尋,無法真正瞭解其他答案。我想給它一個問題。我想我現在已經掌握了它!謝謝! – 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 
相關問題