读&编写全局变量和列表

时间:2012-09-28 11:32:31

标签: python singleton wxpython

编辑:正如我刚刚发现的那样,“Singleton”在python中没有用处。 python使用“Borg”代替。 http://wiki.python.de/Das%20Borg%20Pattern和Borg一起,我能够读到&从不同的类编写全局变量,如:

b1 = Borg()
b1.colour = "red"
b2 = Borg()
b2.colour
>>> 'red'

但我能够使用borg创建/读取列表:

b1 = Borg()
b1.colours = ["red", "green", "blue"]
b2 = Borg()
b2.colours[0]

这是博格不支持的吗?如果是:我如何创建我可以阅读的全局列表&从不同的班级写?


原始问题:

我想阅读&从不同的类编写全局变量。伪代码:

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

printresult应为“100”和“20”。 我听说“Singleton”可以做到这一点......但我没有找到任何关于“Singleton”的好解释。如何使这个简单的代码工作?

1 个答案:

答案 0 :(得分:2)

Borg模式类attrs不会在新实例调用时重置,但实例attrs将会重置。如果要保留以前设置的值,请​​确保使用类attrs而不是实例attrs。下面的代码可以满足您的需求。

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]

为证明这一点,请使用实例attr y再次尝试。你会得到一个不愉快的结果。

祝你好运, 麦克