聊聊python里如何用Borg pattern实现的单例模式
程序员文章站
2023-11-21 10:03:46
有如下 borg pattern 的实现:
class borg(object):
__shared_state = {}
def __init_...
有如下 borg pattern 的实现:
class borg(object): __shared_state = {} def __init__(self): self.__dict__ = self.__shared_state self.state = 'init' def __str__(self): return self.state
之前一直看不懂为什么 borg class 要那样实现, 后来学到两个知识点后发现原来这么简单明了:
- 关于 __shared_state:
- 在 __init__(self, ) 外面定义的变量,是属于这个 class 的,并且由所有的 instance 共享的,而不是单属于某个instance; 在 __init__(self, ) 里面定义的变量,只属于这个 object instance (self) 本身。
- 关于 __dict__:
- 类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里的;对象的__dict__中存储了一些self.xxx的一些东西
试着跑一下:
if __name__ == '__main__': rm1 = borg() rm2 = borg() rm1.state = 'idle' rm2.state = 'running' print('rm1: {0}'.format(rm1)) print('rm2: {0}'.format(rm2)) rm2.state = 'zombie' print('rm1: {0}'.format(rm1)) print('rm2: {0}'.format(rm2)) print('rm1 id: {0}'.format(id(rm1))) print('rm2 id: {0}'.format(id(rm2))) rm3 = yourborg() print('rm1: {0}'.format(rm1)) print('rm2: {0}'.format(rm2)) print('rm3: {0}'.format(rm3))
其结果为:
### output ###
# rm1: running
# rm2: running
# rm1: zombie
# rm2: zombie
# rm1 id: 140732837899224
# rm2 id: 140732837899296
# rm1: init
# rm2: init
# rm3: init
本文代码来自:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。