python type()動態創建類

 

type()函數可以查看一個類型或變量的類型,Hello是一個class,它的類型就是type,而h是一個實例,它的類型就是class Hello。

我們說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))
h = Hello()

h.hello() # hello world.

h.hello('py') # hello py.

print(type(Hello)) # <class 'type'>

print(type(h)) # <class '__main__.Hello'>

要創建一個class對象,type()函數依次傳入3個參數:

class的名稱; 
繼承的父類集合,注意Python支持多重繼承,如果只有一個父類,別忘了tuple的單元素寫法; 
class的方法名稱與函數綁定,這裏我們把函數fn綁定到方法名hello上。 
通過type()函數創建的類和直接寫class是完全一樣的,因爲Python解釋器遇到class定義時,僅僅是掃描一下class定義的語法,然後調用type()函數創建出class。

正常情況下,我們都用class Xxx…來定義類,但是,type()函數也允許我們動態創建出類來,也就是說,動態語言本身支持運行期動態創建類,這和靜態語言有非常大的不同,要在靜態語言運行期創建類,必須構造源代碼字符串再調用編譯器,或者藉助一些工具生成字節碼實現,本質上都是動態編譯,會非常複雜。
--------------------- 
作者:周小董 
來源:CSDN 
原文:https://blog.csdn.net/xc_zhou/article/details/80851625 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章