欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python單例模式實(shí)例詳解

 更新時(shí)間:2017年03月01日 11:40:55   作者:一個(gè)人的天空@  
這篇文章主要介紹了Python單例模式,結(jié)合實(shí)例形式分析了單例模式的概念、實(shí)現(xiàn)與使用方法、已經(jīng)相關(guān)注意事項(xiàng),需要的朋友可以參考下

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

單例模式:保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)他的全局訪問(wèn)點(diǎn)。

實(shí)現(xiàn)某個(gè)類只有一個(gè)實(shí)例的途徑:

1,讓一個(gè)全局變量使得一個(gè)對(duì)象被訪問(wèn),但是他不能防止外部實(shí)例化多個(gè)對(duì)象。

2,讓類自身保存他的唯一實(shí)例,這個(gè)類可以保證沒(méi)有其他實(shí)例可以被創(chuàng)建。

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

餓漢式單例類:在類被加載時(shí)就將自己實(shí)例化(靜態(tài)初始化)。其優(yōu)點(diǎn)是躲避了多線程訪問(wèn)的安全性問(wèn)題,缺點(diǎn)是提前占用系統(tǒng)資源。

懶漢式單例類:在第一次被引用時(shí),才將自己實(shí)例化。避免開(kāi)始時(shí)占用系統(tǒng)資源,但是有多線程訪問(wèn)安全性問(wèn)題。

實(shí)例:

#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('初始化實(shí)例')
        Singleton.instance=Singleton()
      else:
        PrintInfo('單例已經(jīng)實(shí)例化')
      Singleton.mutex.release()
    else:
      PrintInfo('單例已經(jīng)實(shí)例化')
    return Singleton.instance
def clientUI():
  Singleton.GetInstance()
  Singleton.GetInstance()
  Singleton.GetInstance()
  return
if __name__=='__main__':
  clientUI();

結(jié)果:

初始化實(shí)例 單例已經(jīng)實(shí)例化 單例已經(jīng)實(shí)例化

追加解釋 @staticmethod 在 Python中提到 classmethod 就要提到 staticmethod,不是因?yàn)槎哂惺裁搓P(guān)系,而是為了讓用戶區(qū)分以便更清楚地寫(xiě)代碼。在C++中,我們了解直接通過(guò)類名訪問(wèn)的函數(shù)稱為類的靜態(tài)函數(shù),即static修飾的函數(shù),可見(jiàn)C++中classmethod和staticmethod是一個(gè)概念。 那么python中二者有什么區(qū)別呢?先來(lái)看下二者如何在python代碼中聲明

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

對(duì)于classmethod的參數(shù),需要隱式地傳遞類名,而staticmethod參數(shù)中則不需要傳遞類名,其實(shí)這就是二者最大的區(qū)別。

二者都可以通過(guò)類名或者類實(shí)例對(duì)象來(lái)調(diào)用,因?yàn)閺?qiáng)調(diào)的是classmethod和staticmethod,所以在寫(xiě)代碼的時(shí)候最好使用類名,良好的編程習(xí)慣吧。

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

對(duì)于classmethod,可以通過(guò)子類來(lái)進(jìn)行重定義。

提到類級(jí)別的函數(shù),也順帶提及類級(jí)別的變量

class MyClass:
 i = 123 # class-level variable
 def __init__(self):
 self.i = 456 # object-level variable
 ...

為了清晰地區(qū)分上面兩個(gè)i,最好的辦法就是考慮到python中的一切都是object,所以i=123屬于class object的,i=456屬于class instance object

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 解決python圖像處理圖像賦值后變?yōu)榘咨膯?wèn)題

    解決python圖像處理圖像賦值后變?yōu)榘咨膯?wèn)題

    這篇文章主要介紹了解決python圖像處理圖像賦值后變?yōu)榘咨膯?wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python中的數(shù)據(jù)可視化matplotlib與繪圖庫(kù)模塊

    Python中的數(shù)據(jù)可視化matplotlib與繪圖庫(kù)模塊

    這篇文章介紹了Python中的數(shù)據(jù)可視化matplotlib與繪圖庫(kù)模塊,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • python 實(shí)現(xiàn)批量文件加密功能

    python 實(shí)現(xiàn)批量文件加密功能

    python自動(dòng)化辦公現(xiàn)在可不是一個(gè)陌生的詞,也隨著人們對(duì)自己隱私越來(lái)越看重,本文主要介紹了python 實(shí)現(xiàn)批量文件加密功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 利用python和ffmpeg 批量將其他圖片轉(zhuǎn)換為.yuv格式的方法

    利用python和ffmpeg 批量將其他圖片轉(zhuǎn)換為.yuv格式的方法

    今天小編就為大家分享一篇利用python和ffmpeg 批量將其他圖片轉(zhuǎn)換為.yuv格式的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 對(duì)DataFrame數(shù)據(jù)中的重復(fù)行,利用groupby累加合并的方法詳解

    對(duì)DataFrame數(shù)據(jù)中的重復(fù)行,利用groupby累加合并的方法詳解

    今天小編就為大家分享一篇對(duì)DataFrame數(shù)據(jù)中的重復(fù)行,利用groupby累加合并的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python生成可執(zhí)行文件之PyInstaller庫(kù)的使用方式

    Python生成可執(zhí)行文件之PyInstaller庫(kù)的使用方式

    PyInstaller是一個(gè)十分有用的第三方庫(kù),通過(guò)對(duì)源文件打包,Python程序可以在沒(méi)有安裝Python的環(huán)境中運(yùn)行,也可以作為一個(gè)獨(dú)立文件方便傳遞和管理,下面這篇文章主要給大家介紹了關(guān)于Python生成可執(zhí)行文件之PyInstaller庫(kù)的使用方式,需要的朋友可以參考下
    2022-04-04
  • Python全局變量用法實(shí)例分析

    Python全局變量用法實(shí)例分析

    這篇文章主要介紹了Python全局變量用法,結(jié)合實(shí)例形式分析了Python中全局變量的定義、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-07-07
  • python3 刪除所有自定義變量的操作

    python3 刪除所有自定義變量的操作

    這篇文章主要介紹了python3 刪除所有自定義變量的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • python 用戶交互輸入input的4種用法詳解

    python 用戶交互輸入input的4種用法詳解

    這篇文章主要介紹了python 用戶交互輸入input的4種用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python基礎(chǔ)之Socket通信原理

    Python基礎(chǔ)之Socket通信原理

    這篇文章主要介紹了Python基礎(chǔ)之Socket通信原理,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評(píng)論