我知道使用此模式是为了创建具有相同状态的多个实例,但是我真的不明白它是如何工作的。
class Borg:
_shared_state = {}
def __init__(self):
self.__dict__ = self._shared_state
class Singleton(Borg):
def __init__(self, **kwargs):
Borg.__init__(self)
self._shared_state.update(kwargs)
def __str__(self):
return str(self._shared_state)
更具体地说,当我在Singleton init方法中调用Borg.init时会发生什么?
最佳答案
首先,类变量由所有实例共享。
class Spam:
ham = 'ham'
s1 = Spam()
s2 = Spam()
print(s1.ham) # => ham
print(s2.ham) # => ham
Spam.ham = 'egg'
print(s1.ham) # => egg
print(s2.ham) # => egg
其次,属性由
self.__dict__
管理。class Spam:
pass
s1 = Spam()
s1.__dict__['ham'] = 'ham'
print(s1.ham) # => ham
Borg模式使用此功能。
Borg.__shared_dict
是类变量。出现此现象的原因是,每当创建Singleton实例时,都会将
_shared_dict
分配给self.__dict__
。关于python - 有人可以向我解释python中的Borg设计模式吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49350380/