type()函數既可以返回一個對象的類型,又可以創建出新的類型
通過type()函數創建的類和直接寫class是完全一樣的,因為Python解釋器遇到class定義時,僅僅是掃描一下class定義的語法,然后調用type()函數創建出class
正常情況下,我們都用class Xxx...來定義類,但type()函數也允許動態創建出類來
查看數據類型
type()函數可以查看一個類型或變量的類型
class Hello(object): #定義一個hello.py文件,並定義一個Hello class def hello(self, name='world'): print('Hello, %s.' % name) from hello import Hello h = Hello() h.hello() #輸出:Hello, world. print(type(Hello)) #輸出:<class 'type'>,Hello是一個class,它的類型就是type print(type(h)) #輸出:<class 'hello.Hello'>,h是一個實例,它的類型就是class Hello
動態創建類
type()函數也可以創建出新的類型
比如,可以通過type()函數創建出類,而無需通過class 類名(object)...的定義
通過type()函數創建類,需依次傳入3個參數:
1) class的名稱;
2) 繼承的父類集合,注意Python支持多重繼承,如果只有一個父類,別忘了tuple的單元素寫法;
3) class的方法名稱與函數綁定
def fn(self, name='world'): # 先定義函數 print('Hello, %s.' % name) Hello = type('Hello', (object,), dict(hello=fn)) # 創建Hello類,父類是object,創建類方法hello並綁定的是fn h = Hello() h.hello() #輸出:Hello, world print(type(Hello)) #輸出:<class 'type'> print(type(h)) #輸出:<class '__main__.Hello'>