我知道这个模式用于创建具有相同状态的多个实例,但我真的不明白它是如何工作的。
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 会发生什么?
答案 0 :(得分:1)
首先,类变量由所有实例共享。
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
其次,attrbutes由self.__dict__
管理。
class Spam:
pass
s1 = Spam()
s1.__dict__['ham'] = 'ham'
print(s1.ham) # => ham
Borg模式使用此功能。 Borg.__shared_dict
是类变量。
出现此问题的原因是每当创建Singleton实例时_shared_dict
都分配给self.__dict__
。