首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取和写入全局变量和列表

读取和写入全局变量和列表
EN

Stack Overflow用户
提问于 2012-09-28 11:32:31
回答 1查看 185关注 0票数 1

编辑:正如我刚刚发现的,"Singleton“在python中并不那么有用。python使用"Borg“代替。使用Borg I的http://wiki.python.de/Das%20Borg%20Pattern能够从不同的类读取和写入全局变量,如:

代码语言:javascript
复制
b1 = Borg()
b1.colour = "red"
b2 = Borg()
b2.colour
>>> 'red'

但我是不能用borg创建/读取列表,如下所示:

代码语言:javascript
复制
b1 = Borg()
b1.colours = ["red", "green", "blue"]
b2 = Borg()
b2.colours[0]

这是博格不支持的吗?如果是:我如何创建全局列表,我可以从不同的类读和写?

原题:

我想读和写来自不同类的全局变量。伪码:

代码语言:javascript
复制
class myvariables():
    x = 1
    y = 2

class class1():
    # receive x and y from class myvariables
    x = x*100
    y = y*10
    # write x and y to class myvariables

class class2():
    # is called *after* class1
    # receive x and y from class myvariables
    print x
    print y

打印结果应为"100“和"20”。我听说“辛格尔顿”能做到这一点。但我没有找到任何关于“辛格尔顿”的好解释。我如何使这个简单的代码工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-29 02:35:08

在新的实例调用时,Borg模式类吸引将不会被重置,但是实例调用将被重置。如果要保留以前设置的值,请确保使用的是类吸引而不是实例吸引。下面的代码会做你想做的事。

代码语言:javascript
复制
class glx(object):
    '''Borg pattern singleton, used to pass around refs to objs. Class
    attrs will NOT be reset on new instance calls (instance attrs will).
    '''
    x = ''
    __sharedState = {}
    def __init__(self):
        self.__dict__ = self.__sharedState
        #will be reset on new instance 
        self.y = ''  


if __name__ == '__main__':
    gl = glx()
    gl.x = ['red', 'green', 'blue']
    gl2 = glx()
    print gl2.x[0]

为了证明这一点,再试一次,你会得到一个不愉快的结果。

祝你好运迈克

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

https://stackoverflow.com/questions/12639205

复制
相关文章

相似问题

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