2015-10-05 82 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的成员。