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