2016-07-19 61 views
-4

對於OOP語言,我很新,我有一個場景,我想在兩個都有方法的類之間共享一個變量。在一類中,我有一個變量var1的函數。我想讓這個變量可用於我的類Two,func2但是我不知道如何做到這一點?在類和方法之間共享變量

class One(object): 

    def func1(self): 
     var1 = 'foo' 

class Two(object): 

    def func2(self): 
    # how can i get var1 here ? 
+3

您需要將變量傳遞給該方法,或者其中一個類可以從另一個類繼承,從而獲得它的變量,但這是假設您理解OOP足以瞭解抽象類本身與實例化對象(如圖所示,變量只存在於方法的局部範圍內,而不是在'__init__'方法中定義它)。你也可以把它變成一個全局變量或者一個和兩個都使用的第三類對象的一部分。很難用'One'和'Two'來說,也不瞭解實際的數據關係。 – Dan

+2

你也可能希望'var1'是一個實例變量而不是本地變量(例如'self.var1 ='foo'')。然後'func2'可以訪問它的值,如果它有一個「One」的實例的引用(儘管這個實例來自哪裏不可能說這個問題是多麼抽象)。 – Blckknght

+0

如果你把這個抽象的要少一點,那麼你會得到更好的答案,這樣就可以理解'One'和'Two'(如果有的話)之間的關係(如果真的是保密的話,選擇一個類似的關係)。 – Dan

回答

0

如果其中一個類實際上可以是另一個類的子類,那麼可以使用繼承。

class One(object): 

    def func1(self): 
     var1 = 'foo' 

class Two(One): 

    # func1 already exists here. 
    # So does var1 

可以使函數接受參數

class One(object): 

    def func1(self): 
     var1 = 'foo' 

class Two(object): 

    def func2(self, var): 
     # Use var 

或者你也可以使用全局變量,但我認爲要避免這種情況,如果你是剛剛進入OOP。

注意:讓我指出,在更大的項目和程序中使用全局變量在實踐中容易出現很多錯誤。你可以使用它,直到你有經驗轉移到另一種方法。但最終你將不得不退出在OOP中使用它們。我建議它僅用於練習目的。在編碼時記住這一點。

編輯:在你的情況,你可能想使用靜態類元素,如。

class One(object): 
    var1 = "foonimo" 
    def func1(self): 
     #use var1 

class Two(object): 

    def func2(self, var): 
     # Use as One.var1 

這應該工作,它比全局變量更可行。

+0

1.如果OP想要超載該方法,第一個是毫無意義的。 2.「你可以使用全局變量」 - 這就是我實際投票的原因。 –

+1

@EliKorvigo我建議避免,但是你不能否認它是一個選項。 – Rockybilly

+0

他是一個新手,因此我會更多地強調這個建議。 –