最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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è)訪問他的全局訪問點(diǎn)。

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

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

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

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

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

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

實(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ū)分以便更清楚地寫代碼。在C++中,我們了解直接通過類名訪問的函數(shù)稱為類的靜態(tài)函數(shù),即static修飾的函數(shù),可見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ū)別。

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

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

對(duì)于classmethod,可以通過子類來(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)文章

  • Broadcast廣播機(jī)制在Pytorch Tensor Numpy中的使用詳解

    Broadcast廣播機(jī)制在Pytorch Tensor Numpy中的使用詳解

    python中Broadcast機(jī)制非常實(shí)用,在python中的廣播機(jī)制其實(shí)很簡(jiǎn)單,下方主要介紹Broadcast廣播機(jī)制在Pytorch Tensor Numpy中的使用,希望對(duì)你有所幫助
    2022-08-08
  • Python實(shí)現(xiàn)的Google IP 可用性檢測(cè)腳本

    Python實(shí)現(xiàn)的Google IP 可用性檢測(cè)腳本

    這篇文章主要介紹了Python實(shí)現(xiàn)的Google IP 可用性檢測(cè)腳本,本文腳本需要Python 3.4+環(huán)境,需要的朋友可以參考下
    2015-04-04
  • Python實(shí)現(xiàn)視頻轉(zhuǎn)換為音頻的方法詳解

    Python實(shí)現(xiàn)視頻轉(zhuǎn)換為音頻的方法詳解

    這篇文章主要為大家詳細(xì)Python如何將視頻轉(zhuǎn)換為音頻并將音頻文件保存到特定文件夾下,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • Python 實(shí)現(xiàn)隨機(jī)數(shù)詳解及實(shí)例代碼

    Python 實(shí)現(xiàn)隨機(jī)數(shù)詳解及實(shí)例代碼

    這篇文章主要介紹了Python 實(shí)現(xiàn)隨機(jī)數(shù)詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 實(shí)踐Python的爬蟲框架Scrapy來(lái)抓取豆瓣電影TOP250

    實(shí)踐Python的爬蟲框架Scrapy來(lái)抓取豆瓣電影TOP250

    這篇文章主要介紹了實(shí)踐Python的爬蟲框架Scrapy來(lái)抓取豆瓣電影TOP250的過程,文中的環(huán)境基于Windows操作系統(tǒng),需要的朋友可以參考下
    2016-01-01
  • python的?PyPDF2實(shí)現(xiàn)pdf文件切割和合并

    python的?PyPDF2實(shí)現(xiàn)pdf文件切割和合并

    大家好,本篇文章主要講的是python的?PyPDF2實(shí)現(xiàn)pdf文件切割和合并,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Python裝飾器語(yǔ)法糖

    Python裝飾器語(yǔ)法糖

    今天小編就為大家分享一篇關(guān)于Python裝飾器語(yǔ)法糖,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Jupyter Notebook調(diào)用指定的虛擬環(huán)境的實(shí)現(xiàn)示例

    Jupyter Notebook調(diào)用指定的虛擬環(huán)境的實(shí)現(xiàn)示例

    本文主要介紹了Jupyter Notebook調(diào)用指定的虛擬環(huán)境的實(shí)現(xiàn)示例,,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 基于Python?PyQt6打造高顏值多功能音頻錄制工具

    基于Python?PyQt6打造高顏值多功能音頻錄制工具

    在當(dāng)今數(shù)字化時(shí)代,音頻錄制工具已經(jīng)成為大家的必備工具,本文將詳細(xì)介紹如何使用Python的PyQt6庫(kù)開發(fā)一款功能全面,界面美觀的桌面錄音工具,感興趣的可以了解下
    2025-05-05
  • jupyter安裝小結(jié)

    jupyter安裝小結(jié)

    jupyter (之前的 ipython notebook )于我的最大意義在于,讓學(xué)習(xí)進(jìn)程和探索進(jìn)程變得可累積,正如它的原先名字中的 notebook 所暗示的那樣,作為學(xué)習(xí)的記錄者,方便你隨時(shí)撿起學(xué)習(xí)的進(jìn)度,增量式地前進(jìn)
    2016-03-03

最新評(píng)論

泽州县| 霞浦县| 姜堰市| 慈利县| 新绛县| 营山县| 灯塔市| 社会| 肥乡县| 溆浦县| 彭阳县| 咸阳市| 宁城县| 当涂县| 德庆县| 海伦市| 南皮县| 峨山| 渝中区| 梅河口市| 西平县| 邯郸市| 泸州市| 庆阳市| 柏乡县| 赞皇县| 东丽区| 新巴尔虎左旗| 大同县| 法库县| 大同县| 买车| 若羌县| 安多县| 云浮市| 赤壁市| 汝阳县| 凤翔县| 安康市| 德惠市| 镶黄旗|