1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      python實(shí)現(xiàn)單例模式的方法

      小編給大家分享一下python實(shí)現(xiàn)單例模式的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討方法吧!

      我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、清河門ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的清河門網(wǎng)站制作公司

      Python單例模式的4種實(shí)現(xiàn)方法:

      #-*- encoding=utf-8 -*-
      print '----------------------方法1--------------------------'
      #方法1,實(shí)現(xiàn)__new__方法
      #并在將一個(gè)類的實(shí)例綁定到類變量_instance上,
      #如果cls._instance為None說明該類還沒有實(shí)例化過,實(shí)例化該類,并返回
      #如果cls._instance不為None,直接返回cls._instance
      class Singleton(object):
          def __new__(cls, *args, **kw):
              if not hasattr(cls, '_instance'):
                  orig = super(Singleton, cls)
                  cls._instance = orig.__new__(cls, *args, **kw)
              return cls._instance
       
      class MyClass(Singleton):
          a = 1
       
      one = MyClass()
      two = MyClass()
       
      two.a = 3
      print one.a
      #3
      #one和two完全相同,可以用id(), ==, is檢測(cè)
      print id(one)
      #29097904
      print id(two)
      #29097904
      print one == two
      #True
      print one is two
      #True
       
      print '----------------------方法2--------------------------'
      #方法2,共享屬性;所謂單例就是所有引用(實(shí)例、對(duì)象)擁有相同的狀態(tài)(屬性)和行為(方法)
      #同一個(gè)類的所有實(shí)例天然擁有相同的行為(方法),
      #只需要保證同一個(gè)類的所有實(shí)例具有相同的狀態(tài)(屬性)即可
      #所有實(shí)例共享屬性的最簡(jiǎn)單最直接的方法就是__dict__屬性指向(引用)同一個(gè)字典(dict)
      #可參看:http://code.activestate.com/recipes/66531/
      class Borg(object):
          _state = {}
          def __new__(cls, *args, **kw):
              ob = super(Borg, cls).__new__(cls, *args, **kw)
              ob.__dict__ = cls._state
              return ob
       
      class MyClass2(Borg):
          a = 1
       
      one = MyClass2()
      two = MyClass2()
       
      #one和two是兩個(gè)不同的對(duì)象,id, ==, is對(duì)比結(jié)果可看出
      two.a = 3
      print one.a
      #3
      print id(one)
      #28873680
      print id(two)
      #28873712
      print one == two
      #False
      print one is two
      #False
      #但是one和two具有相同的(同一個(gè)__dict__屬性),見:
      print id(one.__dict__)
      #30104000
      print id(two.__dict__)
      #30104000
       
      print '----------------------方法3--------------------------'
      #方法3:本質(zhì)上是方法1的升級(jí)(或者說高級(jí))版
      #使用__metaclass__(元類)的高級(jí)python用法
      class Singleton2(type):
          def __init__(cls, name, bases, dict):
              super(Singleton2, cls).__init__(name, bases, dict)
              cls._instance = None
          def __call__(cls, *args, **kw):
              if cls._instance is None:
                  cls._instance = super(Singleton2, cls).__call__(*args, **kw)
              return cls._instance
       
      class MyClass3(object):
          __metaclass__ = Singleton2
       
      one = MyClass3()
      two = MyClass3()
       
      two.a = 3
      print one.a
      #3
      print id(one)
      #31495472
      print id(two)
      #31495472
      print one == two
      #True
      print one is two
      #True
       
      print '----------------------方法4--------------------------'
      #方法4:也是方法1的升級(jí)(高級(jí))版本,
      #使用裝飾器(decorator),
      #這是一種更pythonic,更elegant的方法,
      #單例類本身根本不知道自己是單例的,因?yàn)樗旧?自己的代碼)并不是單例的
      def singleton(cls, *args, **kw):
          instances = {}
          def _singleton():
              if cls not in instances:
                  instances[cls] = cls(*args, **kw)
              return instances[cls]
          return _singleton
       
      @singleton
      class MyClass4(object):
          a = 1
          def __init__(self, x=0):
              self.x = x
       
      one = MyClass4()
      two = MyClass4()
       
      two.a = 3
      print one.a
      #3
      print id(one)
      #29660784
      print id(two)
      #29660784
      print one == two
      #True
      print one is two
      #True
      one.x = 1
      print one.x
      #1
      print two.x
      #1

      看完了這篇文章,相信你對(duì)python實(shí)現(xiàn)單例模式的方法有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


      名稱欄目:python實(shí)現(xiàn)單例模式的方法
      網(wǎng)址分享:http://www.ef60e0e.cn/article/ghpije.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        衡阳市| 湟中县| 苏尼特右旗| 南岸区| 昌黎县| 钟祥市| 平果县| 汨罗市| 金秀| 民县| 新干县| 岐山县| 南丰县| 涿鹿县| 灵寿县| 稷山县| 遂平县| 承德市| 乐都县| 松江区| 商南县| 东安县| 玉田县| 安化县| 旬阳县| 周至县| 迁西县| 庆阳市| 福州市| 卓资县| 兴化市| 文水县| 平乐县| 赞皇县| 绿春县| 库尔勒市| 仙居县| 海宁市| 岗巴县| 江门市| 志丹县|