2015-10-05 165 views
0

之間共享成員變量讀https://stackoverflow.com/a/69067/1767754後,我知道創建實例(靜態)

1)在Python靜態成員是不是在C相同的靜態成員++

2)僅新創建的實例將有最新的價值同步靜態變量的值

class Test: 
    var = 3 
    def __init__(self): 
     pass 

a = Test() 
print "a " + str(a.var) #output: 3 
Test.var = 5 
b = Test() 
print "b " + str(b.var) #output: 5 
print "a " + str(a.var) #output: 3 not synced with static member 

那麼在類實例之間共享成員變量的常用方法是什麼?怎麼樣創建一個擁有共享數據的全局類?這樣的:

class Globals: 
    var = 3 
class Test: 
    def setVar(self, var): 
     Globals.var = var 

test = Test() 
test.setVar(3) 
print Globals.var 
+1

無法重現,它總是輸出類的值。此外,靜態變量的行爲與C++完全相同,但不要忘記向對象添加屬性可能會動態發生,並且查找將首先查找實例,然後在類中查找。 –

+0

但是,我在最後一次輸出中得到了5個。 – hsfzxjy

+0

對不起,我創建了廢話,我正在快速檢查... – user1767754

回答

2

只有新創建的實例將具有靜態變量

事實並非如此的最新值同步值。也許你感到困惑的行爲:

class Test: 
    var = 3 
    def __init__(self): 
     pass 

a = Test() 
print "a " + str(a.var) 
Test.var = 5 
b = Test() 
print "b " + str(b.var) 
print "a " + str(a.var) 

輸出:

a 3 
b 5 
a 5 

class Test: 
    var = 3 
    def __init__(self): 
     pass 

a = Test() 
print "a " + str(a.var) 
a.var = 2 # Making var a member of the instance a 
Test.var = 5 
b = Test() 
print "b " + str(b.var) 
print "a " + str(a.var) 
a 3 
b 5 
a 2 

在第二種情況下的行爲,var不僅是靜態成員它也是實例a的成員。

相關問題