1>自定義元類控制類的例項化行為
1.1> 儲備知識之 __call__方法
先看下定義一類,有和沒有__call__方法是,呼叫該類例項化的物件時的情況,如下:
謹記:一定是在呼叫物件時會自動觸發執行__call__方法
既然有__call__方法就可以被呼叫,那麼類也就是元類例項化出來的物件,是否說明元類也存在__call__方法?
1.2> 自定義元類,控制類的例項化過程
首先回顧下之前說的類的例項化過程:1、產生乙個空物件;2、呼叫類的__init__函式,初始化物件屬性;3、返回這
個物件;
所以,__call__至少也應該包含這三步,
1、產生乙個空物件,可以用 obj=object.__new__() 實現
2、初始化物件,self.__init(obj, *args, **kwargs)
3、返回物件, return obj
一定要記住返回obj,因為例項化a得到的就是__call__的返回值
自定義之前,先看下之前的類的例項化過程,以及物件的字典,如下
如上,初始化的時候,第乙個引數也就是self,肯定就是物件自己
2>自定義元類控制類的例項化行為的應用-----單例模式
先看個例子,簡單了解下 單例模式
那麼怎麼通過元類來實現 單例模式呢,我們都知道,例項化,其實就是觸發__call__方法的執行,
所以,肯定還是要在__call__方法裡面做文章了。
思路:首先想到,既然不能一直例項化,肯定要加判斷邏輯了,哪些情況需要執行__call__方法,
哪些情況就不執行,直接返回物件?
更改如下:
python 物件導向單例元類
通過類方法來實現單例,這樣我在執行乙個函式中建立物件,但是呼叫多次只是乙個例項。class person classmethod defsingle instancee cls,args,kwargs if notgetattr person,instance cls.instance person...
物件導向之單例設計模式
設計模式 解決某一種問題的思想。是一種行之有效的解決方式。23種模式。單例設計模式。思想!思想!思想!解決問題 能夠保證乙個類的物件在記憶體中的唯一性。應用場景 多個成序都在操作同乙個配置檔案時,程式b需要知道程式a的結果並基於此結果進行後續操作 前提是,資料都儲存在配置檔案的物件中,要求程式a和程...
python物件導向之單例模式
一.什麼叫單例模式 基於某種方法通過類例項化的得到的物件,或者說記憶體位址指向同乙個.總共有4種方式.最後乙個方式就是當作包匯入使用。方式一 方式一 settings.py檔案中內容 ip 1.1.1.1 port 3306 版本一import settings class mysql instan...