有如borg模式下的实现:
类Borg(对象): __shared_state={} def __init__(自我): 自我。__dict__=self.__shared_state 自我。状态=癐nit” def __str__(自我): 返回self.state >之前之前一直看不懂为什么Borg类要那样实现,后来学到两个知识点后发现原来这么简单明了:
-
<李>关于__shared_state:
-
<李>在__init__(自我)外面定义的变量,是属于这的个类,并且由所有的实例共享的,而不是单属于某个实例;在__init__(自我)里面定义的变量,只属于这个对象实例(自我)本身。李>
-
<李>类的静态函数、类函数,普通函数,全局变量以及一些内置的属性都是放在类__dict__里的;对象的__dict__中存储了一些self.xxx的一些东西李>
试着跑一下:
if __name__==癬_main__”: 1=Borg () rm2=Borg () 1。=跋兄谩弊刺? rm2。状态=氨寂堋? 打印(“1:{0}”.format (1)) 打印(' rm2: {0} ' .format (rm2)) rm2。状态='僵尸' 打印(“1:{0}”.format (1)) 打印(' rm2: {0} ' .format (rm2)) 打印(' 1 id: {0} ' .format (id (1))) 打印(' rm2 id: {0} ' .format (id (rm2))) 收款=YourBorg () 打印(“1:{0}”.format (1)) 打印(' rm2: {0} ' .format (rm2)) 打印(“收款:{0}”.format(收款)) >之前其结果为:
# # # # # #
输出 # 1:运行
# rm2:运行
# 1:僵尸
# rm2:僵尸
# 1 id: 140732837899224
# rm2 id: 140732837899296
# 1:Init
# rm2: Init
#收款:Init本文代码来自:https://github.com/faif/python-patterns/blob/master/patterns/creational/borg.py
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
聊聊python里如何用Borg模式实现的单例模式