1. 程式人生 > >python type()動態建立類

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 
版權宣告:本文為博主原創文章,轉載請附上博文連結!