创建实例(静态)
问题描述:
之间共享成员变量读https://*.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
答
只有新创建的实例将具有静态变量
事实并非如此的最新值同步值。也许你感到困惑的行为:
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
的成员。
无法重现,它总是输出类的值。此外,静态变量的行为与C++完全相同,但不要忘记向对象添加属性可能会动态发生,并且查找将首先查找实例,然后在类中查找。 –
但是,我在最后一次输出中得到了5个。 – hsfzxjy
对不起,我创建了废话,我正在快速检查... – user1767754