聊聊python里如何用Borg pattern实现的单例模式
2019-06-06 09:29
507 查看
有如下 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__中存储了一些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
本文代码来自: https://github.com/faif/python-patterns/blob/master/patterns/creational/borg.py
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- python中如何简单的实现decorator模式--由django admin源码所得体会
- 【Python】Python如何实现单例模式?
- python如何实现单例模式
- Python中的装饰模式如何实现?
- Python如何实现单例模式?其他23种设计模式python如何实现?
- [Web]如何实现从模式窗体-网页对话框 中获得返回值
- 设计模式九(单例模式,python语言实现)
- 如何使用委托与事件来实现观察者模式
- [Web]如何实现从模式窗体-网页对话框 中获得返回值
- 设计模式六(建造者模式,采用python实现)
- python实现Bridge模式
- Liferay研究之廿四:如何实现配置模式
- 自学SSH框架之---struts(三):源码分析struts1如何实现Action单例模式
- 【设计模式】观察者模式(observer)c#/python实现
- 设计模式之观察者模式(Python实现)
- 设计模式十一(桥接模式,python 语言实现)
- 设计模式之单例模式(python实现)
- 如何用Java实现单例模式
- 《生产流水线模式》-也谈如何实现从数据库到UI的一条龙服务
- 如何实现从模式窗体-网页对话框 中获得返回值