有人能解释一下python中的Borg设计模式吗?

时间:2018-03-18 16:42:45

标签: python design-patterns

我知道这个模式用于创建具有相同状态的多个实例,但我真的不明白它是如何工作的。

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 会发生什么?

1 个答案:

答案 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__