聊聊python里如何用Borg模式实现的单例模式

  

有如borg模式下的实现:

        类Borg(对象):   __shared_state={}      def __init__(自我):   自我。__dict__=self.__shared_state   自我。状态=癐nit”      def __str__(自我):   返回self.state      之前      

之前一直看不懂为什么Borg类要那样实现,后来学到两个知识点后发现原来这么简单明了:

  
      <李>关于__shared_state:
      
        <李>在__init__(自我)外面定义的变量,是属于这的个类,并且由所有的实例共享的,而不是单属于某个实例;在__init__(自我)里面定义的变量,只属于这个对象实例(自我)本身。   
      李   <李>关于__dict__:   
        <李>类的静态函数、类函数,普通函数,全局变量以及一些内置的属性都是放在类__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模式实现的单例模式