gpt4 book ai didi

python - 读写全局变量和列表

转载 作者:行者123 更新时间:2023-12-01 05:55:48 24 4
gpt4 key购买 nike

编辑:正如我刚刚发现的,“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]

这是 Borg 不支持的东西吗?如果是:如何创建可以从不同类读取和写入的全局列表?

<小时/>

原始问题:

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

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”。我听说“Singleton”可以做到这一点......但我没有找到“Singleton”的任何好的解释。我怎样才能使这个简单的代码工作?

最佳答案

Borg 模式类属性不会在新实例调用时重置,但实例属性将会重置。如果要保留以前设置的值,请​​确保使用类属性而不是实例属性。下面的代码将执行您想要的操作。

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]

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

祝你好运,迈克

关于python - 读写全局变量和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12639205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com