gpt4 book ai didi

python - 为什么这个 Python Borg/Singleton 模式有效

转载 作者:行者123 更新时间:2023-11-28 19:32:42 25 4
gpt4 key购买 nike

我刚刚在网上偶然发现了这些有趣的代码:

http://code.activestate.com/recipes/66531/

class Borg:
__shared_state = {}
def __init__(self):
self.__dict__ = self.__shared_state
# and whatever else you want in your class -- that's all!

我明白单例是什么,但我不明白被剪掉的特定代码。你能解释一下“__shared_state”是如何/在哪里改变的吗?

我在 ipython 中试过:

In [1]: class Borg:
...: __shared_state = {}
...: def __init__(self):
...: self.__dict__ = self.__shared_state
...: # and whatever else you want in your class -- that's all!
...:
In [2]: b1 = Borg()
In [3]: b2 = Borg()
In [4]: b1.foo="123"
In [5]: b2.foo
Out[5]: '123'
In [6]:

但无法完全理解这是怎么发生的。

最佳答案

因为类的 实例的__dict__ 设置为等于__share_state 字典。它们指向同一个对象。 (Classname.__dict__ 包含所有的类属性)

当你这样做时:

b1.foo = "123"

您正在修改 b1.__dict__Borg.__shared_state 都引用的 dict

关于python - 为什么这个 Python Borg/Singleton 模式有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127925/

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