You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Borg设计模式原理解析:Singleton调用Borg.__init__的作用

理解Borg模式中Borg.__init__()的作用

我来给你把这个逻辑拆解得明明白白——核心就绕着Python对象的__dict__属性转,这个属性是每个实例用来存储自身所有属性的字典。

先看Borg类的定义:它有一个类变量_shared_state,这个变量是所有Borg(包括继承它的Singleton)实例共享的,因为类变量属于类本身,不是某个实例独有的。

当Singleton的__init__方法调用Borg.__init__(self)时,发生了最关键的一步:把当前Singleton实例的__dict__直接替换成了Borg类的_shared_state字典。

咱们用实际创建实例的过程来一步步看:

  • 当你创建第一个Singleton实例:s1 = Singleton(name="Alice")

    1. 先执行Borg.__init__(self),此时s1的__dict__不再是自己默认的空字典,而是指向了Borg的_shared_state(这时这个共享字典还是空的)
    2. 接着执行self._shared_state.update(kwargs),把{"name": "Alice"}加到共享字典里
    3. 因为s1的属性都存在这个共享字典里,所以s1.name就能拿到"Alice"
  • 当你创建第二个Singleton实例:s2 = Singleton(age=30)

    1. 同样先调用Borg.__init__(self),把s2的__dict__也指向同一个_shared_state字典(现在里面已经有{"name": "Alice"}了)
    2. 然后执行update,把{"age":30}合并进去,共享字典变成{"name": "Alice", "age":30}
    3. 这时候你去访问s1.age会得到30,访问s2.name也能得到"Alice"——两个实例完全共享所有属性

这里有个很重要的点要区分:Borg模式和传统单例不一样,它的实例是不同的对象(你可以打印s1 is s2,结果是False),但它们的状态完全共享,这就是Borg模式的核心特点。

给你跑一段代码直观感受下:

s1 = Singleton(name="Alice")
print(s1)  # 输出: {'name': 'Alice'}
s2 = Singleton(age=30)
print(s1)  # 输出: {'name': 'Alice', 'age': 30}
print(s2)  # 输出: {'name': 'Alice', 'age': 30}
print(s1 is s2)  # 输出: False

总结一下:Borg.__init__(self)的作用就是把当前实例的属性存储容器替换成类级别的共享字典,让所有继承自Borg的实例都能共享状态,哪怕它们是不同的对象实例。

内容的提问来源于stack exchange,提问作者aca06

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:36:57