<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ##   介紹   **單例模式(Singleton Pattern)**是一種常用的軟件設計模式,該模式的主要目的是確保**某一個類只有一個實例存在**。當你希望在整個系統中,某個類只能出現一個實例時,單例對象就能派上用場。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類一個類只有一個實例。即一個類只有一個對象實例。 ##   單例模式的實現 ### 方式一:python就是天然的單例模式   其實,**Python 的模塊就是天然的單例模式**,因為模塊在第一次導入時,會生成?`.pyc`?文件,當第二次導入時,就會直接加載?`.pyc`?文件,而不會再次執行模塊代碼。因此,我們只需把相關的函數和數據定義在一個模塊中,就可以獲得一個單例對象了。 ``` ~~~ class Person(): def foo(self): pass p1 = Person() ~~~ ```   在另一個文件中導入使用就可以了。 ~~~ from a.b import p1 print(id(p1.foo())) ~~~   你會發現,不管使用多少次,或者在幾個文件中引用,每次打印的id都是相同的。 ### 方式二:使用裝飾器 ~~~ def outer(cls): instance = None def inner(*args,**kwargs): nonlocal instance if instance == None: instance = cls(*args,**kwargs) return instance return inner @outer class Person(): def __init__(self): pass p1 = Person() p2 = Person() print(id(p1)) print(id(p2)) ~~~ id打印結果 ![](https://img.kancloud.cn/26/d9/26d90c7d644d5f3cf678941394728955_859x161.png) ### 方式三:用\_\_new\_\_方式實現單例模式   我們知道,當我們實例化一個對象時,是**先執行了類的\_\_new\_\_方法**(我們沒寫時,默認調用object.\_\_new\_\_),**實例化對象**;然后**再執行類的\_\_init\_\_方法**,對這個對象進行初始化,所有我們可以基于這個,實現單例模式。 ~~~ class Person(object): __instance = None def __new__(cls, *args, **kwargs): if cls.__instance == None: cls.__instance = object.__new__(cls) return cls.__instance def __init__(self): pass p1 = Person() p2 = Person() print(id(p1)) print(id(p2)) ~~~ id打印結果 ![](https://img.kancloud.cn/cb/57/cb579e648000eb568d0953864ce11b87_906x139.png) 好了,先介紹這三種吧,python實現單例模式方式有很多,以后慢慢補。 # 未完待續。。。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看