首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在实例之间创建共享成员变量(静态)

在实例之间创建共享成员变量(静态)
EN

Stack Overflow用户
提问于 2015-10-05 04:12:22
回答 1查看 2K关注 0票数 1

在看完https://stackoverflow.com/a/69067/1767754之后我知道

1) Python中的静态成员不是C++中相同的静态成员

2)只有新创建的实例才具有静态变量的最新值同步值。

代码语言:javascript
代码运行次数:0
运行
复制
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

那么,在类实例之间共享成员变量的通常方法是什么呢?创建一个保存共享数据的全局类如何?就像这样:

代码语言:javascript
代码运行次数:0
运行
复制
class Globals:
    var = 3
class Test:
    def setVar(self, var):
        Globals.var = var

test = Test()
test.setVar(3)
print Globals.var
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-05 04:33:55

只有新创建的实例才具有静态变量的最新值同步值。

不是这样的。也许您混淆了以下行为:

代码语言:javascript
代码运行次数:0
运行
复制
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)

输出:

代码语言:javascript
代码运行次数:0
运行
复制
a 3
b 5
a 5

带着…的行为

代码语言:javascript
代码运行次数:0
运行
复制
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)
代码语言:javascript
代码运行次数:0
运行
复制
a 3
b 5
a 2

在第二种情况下,var不仅是T的静态成员,也是实例a的成员。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32941160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档