作廖老師的python實戰作業時,對元類這個魔法方法有些小心得。
元類這個黑魔法和linux中root都是bug般的存在,不想糾纏概念性東西,試著從python直譯器的角度分析下元類的執行過程。
其實,元類的主要作用盡在這三句話中:
1.攔截類的建立
2.修改類
3.返回修改後的類
普通類呼叫__new__方法產生例項物件,而元類通過type.__new__建立新的類。
1class
modelmetaclass(type):2#
採集應用元類的子類屬性資訊3#
將採集的資訊作為引數傳入__new__方法4#
應用__new__方法修改類
5def
__new__
(cls,name,bases,attrs):
6...
7return type.__new__(cls,name,bases,attrs)
1class model(dict,metaclass=modelmetaclass):
2 ...
我們定義乙個元類modelmetaclass和乙個應用元類的model類。
1 model = model(**kw)
當我們用model類建立乙個model例項物件,python直譯器執行過程如下:
1.發現元類
2.應用元類。通過元類的__new__建立類物件,__new__方法首先從model類的類定義中蒐集屬性和方法資訊作為字典資料傳入__new__的attrs引數中;使用者對收集的資訊刪減增添修改,生成新的attrs引數;呼叫type.__new__方法,並把新的attrs引數傳入該方法中,即返回乙個新的類物件。
3.如果存在__init__方法,在第二步即生成類物件後呼叫__init__方法初始化類物件
當元類存在時,並不是直接根據類的描述建立例項物件,而是攔截類的例項化。然後根據元類動態修改類的描述,最後根據修改後的類描述來建立物件。
VMware一些使用心得
這段時間vmware workstation用得較多,裝了好幾個虛擬機器,有win2003,win2008,win7,還分32位,64位。裝了這麼多,要麼是用於安裝一些軟體,比如oracle12c,因為宿主機器已經裝了11g,一山難容二虎 要麼是用於部署測試環境。我覺得虛擬機器真是很棒的想法。以下是...
VMware一些使用心得
分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!這段時間vmware workstation用得較多,裝了好幾個虛擬機器,有win2003,win2008,win7,還分32位,64位。裝了這麼多,要麼是用於安裝一些軟體,比如oracl...
Sqoop的一些使用心得
sqoop作為從關係型資料庫匯入hdfs的工具,我們在從關係型資料庫中匯出資料時可先做資料篩選,選定我們所要的資料,能大大的減輕資料負擔,即sql語句後加where條件的實現!經測試可執行sqoop指令碼如下 sqoop import connect jdbc oracle thin ip port...