摘要:關(guān)于類的靜態(tài)函數(shù)類函數(shù)普通函數(shù)全局變量以及一些內(nèi)置的屬性都是放在類里的對象的中存儲了一些的一些東西試著跑一下其結(jié)果為本文代碼來自
有如下 borg pattern 的實現(xiàn):
class Borg(object): __shared_state = {} def __init__(self): self.__dict__ = self.__shared_state self.state = "Init" def __str__(self): return self.state
之前一直看不懂為什么 Borg class 要那樣實現(xiàn), 后來學(xué)到兩個知識點后發(fā)現(xiàn)原來這么簡單明了:
關(guān)于 __shared_state:
在 __init__(self, ) 外面定義的變量,是屬于這個 class 的,并且由所有的 instance 共享的,而不是單屬于某個instance; 在 __init__(self, ) 里面定義的變量,只屬于這個 object instance (self) 本身。
關(guān)于 __dict__:
類的靜態(tài)函數(shù)、類函數(shù)、普通函數(shù)、全局變量以及一些內(nèi)置的屬性都是放在類__dict__里的;對象的__dict__中存儲了一些self.xxx的一些東西
試著跑一下:
if __name__ == "__main__": rm1 = Borg() rm2 = Borg() rm1.state = "Idle" rm2.state = "Running" print("rm1: {0}".format(rm1)) print("rm2: {0}".format(rm2)) rm2.state = "Zombie" print("rm1: {0}".format(rm1)) print("rm2: {0}".format(rm2)) print("rm1 id: {0}".format(id(rm1))) print("rm2 id: {0}".format(id(rm2))) rm3 = YourBorg() print("rm1: {0}".format(rm1)) print("rm2: {0}".format(rm2)) print("rm3: {0}".format(rm3))
其結(jié)果為:
### OUTPUT ### # rm1: Running # rm2: Running # rm1: Zombie # rm2: Zombie # rm1 id: 140732837899224 # rm2 id: 140732837899296 # rm1: Init # rm2: Init # rm3: Init
本文代碼來自: https://github.com/faif/pytho...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/43952.html
摘要:最近在學(xué)習(xí)設(shè)計模式而開發(fā)的語言中比較中意的就是了在這里總結(jié)下設(shè)計模式一般分為三大類構(gòu)造型結(jié)構(gòu)型行為型先從創(chuàng)建型設(shè)計模式開始創(chuàng)建型設(shè)計模式包括單例模式抽象工廠模式工廠方法模式生成器模式惰性初始化模式對象池模式原型模式單例模式單例模式的定義是保 最近在學(xué)習(xí)設(shè)計模式,而開發(fā)的語言中比較中意的就是python了,在這里總結(jié)下. 設(shè)計模式一般分為三大類:構(gòu)造型,結(jié)構(gòu)型,行為型 先從創(chuàng)建型設(shè)計模式...
摘要:面試官要不你來手寫下單例模式唄候選者單例模式一般會有好幾種寫法候選者餓漢式簡單懶漢式在方法聲明時加鎖雙重檢驗加鎖進階懶漢式靜態(tài)內(nèi)部類優(yōu)雅懶漢式枚舉候選者所謂餓漢式指的就是還沒被用到,就直接初始化了對象。面試官:我看你的簡歷寫著熟悉常見的設(shè)計模式,要不你來簡單聊聊你熟悉哪幾個吧?候選者:常見的工廠模式、代理模式、模板方法模式、責(zé)任鏈模式、單例模式、包裝設(shè)計模式、策略模式等都是有所了解的候選者:...
摘要:在中,我們可以用多種方法來實現(xiàn)單例模式使用模塊使用使用裝飾器使用元類使用模塊其實,的模塊就是天然的單例模式,因為模塊在第一次導(dǎo)入時,會生成文件,當?shù)诙螌?dǎo)入時,就會直接加載文件,而不會再次執(zhí)行模塊代碼。 單例模式 單例模式(Singleton Pattern)是一種常用的軟件設(shè)計模式,該模式的主要目的是確保某一個類只有一個實例存在。當你希望在整個系統(tǒng)中,某個類只能出現(xiàn)一個實例時,單例對...
摘要:使用元類可以控制類的創(chuàng)建過程,它主要做三件事攔截類的創(chuàng)建修改類的定義返回修改后的類使用元類實現(xiàn)單例模式的代碼如下執(zhí)行結(jié)果 單例模式 單例模式(Singleton Pattern)是一種常用的軟件設(shè)計模式,該模式的主要目的是確保某一個類只有一個實例存在。當你希望在整個系統(tǒng)中,某個類只能出現(xiàn)一個實例時,單例對象就能派上用場。 比如,某個服務(wù)器程序的配置信息存放在一個文件中,客戶端通過一個 ...
摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...
閱讀 894·2021-09-03 10:42
閱讀 1511·2019-08-30 15:56
閱讀 1444·2019-08-29 17:27
閱讀 870·2019-08-29 15:25
閱讀 3156·2019-08-26 18:27
閱讀 2480·2019-08-26 13:41
閱讀 1888·2019-08-26 10:39
閱讀 1570·2019-08-23 18:36