编辑:正如我刚刚发现的那样,“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”的好解释。如何使这个简单的代码工作?
答案 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再次尝试。你会得到一个不愉快的结果。
祝你好运, 麦克