国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python單例模式實例詳解

2020-02-23 04:25:08
字體:
來源:轉載
供稿:網友

本文實例講述了Python單例模式。分享給大家供大家參考,具體如下:

單例模式:保證一個類僅有一個實例,并提供一個訪問他的全局訪問點。

實現某個類只有一個實例的途徑:

1,讓一個全局變量使得一個對象被訪問,但是他不能防止外部實例化多個對象。

2,讓類自身保存他的唯一實例,這個類可以保證沒有其他實例可以被創建。

多線程時的單例模式:加鎖-雙重鎖定

餓漢式單例類:在類被加載時就將自己實例化(靜態初始化)。其優點是躲避了多線程訪問的安全性問題,缺點是提前占用系統資源。

懶漢式單例類:在第一次被引用時,才將自己實例化。避免開始時占用系統資源,但是有多線程訪問安全性問題。

實例:

#encoding=utf-8#單例模式def PrintInfo(info):#  print unicode(info,'utf-8').decode('gbk')  print info.decode('utf-8').encode('utf-8')import threading#單例類class Singleton():  instance=None  mutex=threading.Lock()  def _init__(self):    pass  @staticmethod  def GetInstance():    if(Singleton.instance==None):      Singleton.mutex.acquire()      if(Singleton.instance==None):        PrintInfo('初始化實例')        Singleton.instance=Singleton()      else:        PrintInfo('單例已經實例化')      Singleton.mutex.release()    else:      PrintInfo('單例已經實例化')    return Singleton.instancedef clientUI():  Singleton.GetInstance()  Singleton.GetInstance()  Singleton.GetInstance()  returnif __name__=='__main__':  clientUI();

結果:

初始化實例 單例已經實例化 單例已經實例化

追加解釋 @staticmethod 在 Python中提到 classmethod 就要提到 staticmethod,不是因為二者有什么關系,而是為了讓用戶區分以便更清楚地寫代碼。在C++中,我們了解直接通過類名訪問的函數稱為類的靜態函數,即static修飾的函數,可見C++中classmethod和staticmethod是一個概念。 那么python中二者有什么區別呢?先來看下二者如何在python代碼中聲明

class MyClass: ... @classmethod # classmethod的修飾符 def class_method(cls, arg1, arg2, ...):  ... @staticmethod # staticmethod的修飾符 def static_method(arg1, arg2, ...):  ...

對于classmethod的參數,需要隱式地傳遞類名,而staticmethod參數中則不需要傳遞類名,其實這就是二者最大的區別。

二者都可以通過類名或者類實例對象來調用,因為強調的是classmethod和staticmethod,所以在寫代碼的時候最好使用類名,良好的編程習慣吧。

對于staticmethod就是為了要在類中定義而設置的,一般來說很少這樣使用,可以使用模塊級(module-level)的函數來替代它。既然要把它定義在類中,想必有作者的考慮。

對于classmethod,可以通過子類來進行重定義。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊宁县| 广汉市| 双江| 江城| 蒙城县| 忻州市| 蒙山县| 天台县| 辰溪县| 乌兰县| 靖宇县| 尤溪县| 正蓝旗| 环江| 榕江县| 石台县| 甘南县| 交城县| 肃宁县| 夹江县| 拉孜县| 宿迁市| 革吉县| 报价| 灵宝市| 盐亭县| 贡嘎县| 沾益县| 遵化市| 密山市| 马关县| 天水市| 郯城县| 乐平市| 广汉市| 离岛区| 永新县| 武穴市| 六枝特区| 顺昌县| 卓尼县|