關於元類的一些使用心得

2022-04-28 22:33:17 字數 1023 閱讀 6226

作廖老師的python實戰作業時,對元類這個魔法方法有些小心得。

元類這個黑魔法和linux中root都是bug般的存在,不想糾纏概念性東西,試著從python直譯器的角度分析下元類的執行過程。

其實,元類的主要作用盡在這三句話中:

1.攔截類的建立

2.修改類

3.返回修改後的類

普通類呼叫__new__方法產生例項物件,而元類通過type.__new__建立新的類。

1

class

modelmetaclass(type):2#

採集應用元類的子類屬性資訊3#

將採集的資訊作為引數傳入__new__方法4#

應用__new__方法修改類

5def

__new__

(cls,name,bases,attrs):

6...

7return type.__new__(cls,name,bases,attrs)

1

class 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...