2011-09-07 48 views
2

好吧我有兩個類,一個依賴於另一個。 所以我需要從第一個類中獲得一個變量並在第二個類中使用它。 但第二個變量是不斷變化的。 像這樣:Python:在類/對象之間共享變量

class class1 : 
    var1 = 0 
    def meth1 (self): 
     self.var1 += 1 
class class2: 
    var2 = class1.var1 
    def see (self): 
     return self.var2 
obj1 = class1() 
obj2 = class2() 

obj1.meth1() 
obj2.see() 

這將返回0而不是1 如果我說在改變VAR類之一,它打印的打印VAR1。 但是,當class2得到它仍然是0 ... 我想它仍然指的是舊的var1。 我在做什麼錯,我應該做什麼?

由於

+1

第一。請大寫類名稱。第二。爲什麼你首先不使用類級變量?你的'var1'不是一個實例變量。你爲什麼要避免普通的實例變量? –

+0

什麼是實例變量? –

+0

這是一個全新的問題。 1.實際上是完整的** Python教程。 2.搜索「Python實例變量」。 3.在完成整個教程並閱讀關於Python實例變量的數百個網頁之後,再次提問。這是一個基本的概念,很難涵蓋對無關問題的評論。 –

回答

6
class class2: 
    var2 = class1.var1 

這是class1.var1的電流值的副本。

「我需要從第一類獲取變量,並在第二次使用它」

使用class1.var1代替var2使當前值的副本。

+0

OH所以當我更改var1時,var2仍然指向什麼var1不會是? 現在,這是有道理的。謝謝您的幫助! –

+0

這就是「複製」的意思,是正確的。 –

+1

非常有用的文章,這將有助於瞭解python中的變量以及如何製作正確的副本:http://henry.precheur.org/python/copy_list – Ski

0

有關變量如何被複制的所有信息都是真實的,推薦的文章已經很好地解釋了。但是,如果您使用class1.var1,則永遠不會從class1獲得值self.var1。你可以用下面的代碼檢查原因:

class Class1 : 
var1 = 0 
def meth1 (self): 
    self.var1 += 1 
    print(id(self.var1)) 

class Class2: 
def meth2 (self): 
    print(id(Class1.var1)) 

obj1 = Class1() 
obj2 = Class2() 

obj1.meth1() 
obj2.meth2() 

你在哪裏得到的Class1.var1不同的ID(這是在第2行var1)和self.var1

如果你想從Class2得到self.var1的價值,你必須初始化var1類外,並使其在其中添加了一個數字的函數內部全球:

var1 = 0 
class class1 : 

    def meth1 (self): 
     global var1 
     var1 += 1 

class class2: 

    def meth2 (self): 
     print(var1) 

obj1 = class1() 
obj2 = class2() 

obj1.meth1() 
obj2.meth2()