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

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/

10-12 18:27