python學習筆記 廖雪峰(40 使用元類)

2021-09-13 15:45:45 字數 1388 閱讀 9754

ype()函式可以檢視乙個型別或變數的型別,hello是乙個class,它的型別就是type,而h是乙個例項,它的型別就是classhello

我們說class的定義是執行時動態建立的,而建立class的方法就是使用type()函式。

type()函式既可以返回乙個物件的型別,又可以建立出新的型別,比如,我們可以通過type()函式建立出hello類,而無需通過class hello(object)...的定義:

>>> def fn(self, name='world'): # 先定義函式

... print('hello, %s.' % name)

...>>> hello = type('hello', (object,), dict(hello=fn)) # 建立hello class

>>> h = hello()

>>> h.hello()

hello, world.

>>> print(type(hello))

>>> print(type(h))

要建立乙個class物件,type()函式依次傳入3個引數:

class的名稱;

繼承的父類集合,注意python支援多重繼承,如果只有乙個父類,別忘了tuple的單元素寫法;

class的方法名稱與函式繫結,這裡我們把函式fn繫結到方法名hello上。

通過type()函式建立的類和直接寫class是完全一樣的,因為python直譯器遇到class定義時,僅僅是掃瞄一下class定義的語法,然後呼叫type()函式建立出class。

正常情況下,我們都用class ***...來定義類,但是,type()函式也允許我們動態建立出類來,也就是說,動態語言本身支援執行期動態建立類,這和靜態語言有非常大的不同,要在靜態語言執行期建立類,必須構造源**字串再呼叫編譯器,或者借助一些工具生成位元組碼實現,本質上都是動態編譯,會非常複雜。

但是如果我們想建立出類呢?那就必須根據metaclass建立出類,所以:先定義metaclass,然後建立類。

連線起來就是:先定義metaclass,就可以建立類,最後建立例項。

__new__()方法接收到的引數依次是:

當前準備建立的類的物件;

類的名字;

類繼承的父類集合;

類的方法集合。

python廖雪峰教程 學習筆記

如何用字元來描述字元 d匹配數字 digit w匹配字母或數字 word s可以匹配空格 space 表示任意個字元,表示至少乙個字元 表示0個或1個字元,表示n個字元,表示n m個字元 可以匹配任意字元 例如 kongxiangyu w如何做到更精確的匹配?規定數字 字母或者下劃線 0 9a za...

Git 廖雪峰 學習筆記

目錄 git工作區域 git初始化及倉庫建立和操作 初始化新的git倉庫 1.新建資料夾 2.在檔案內初始化git 如何將本地倉庫同步到git 遠端倉庫 1.關聯遠端庫 2.第一次推送master分支的所有內容 3.每次本地提交後,推送最新修改 轉殖 分支管理 1.建立與合併分支 2.解決衝突 3....

git 廖雪峰學習筆記

git的誕生 linus堅決反對cvs和svn等集中式版本控制系統 因為速度慢且需要聯網 bitmover公司授權linux社群商業軟體bitkeeper免費使用權 linus社群牛人試圖破解bitkeeper的協議被bitmover公司發現 bitmover公司收回linux社群bitkeeper...