Python使用type動(dòng)態(tài)創(chuàng)建類(lèi)操作示例
本文實(shí)例講述了Python使用type動(dòng)態(tài)創(chuàng)建類(lèi)操作。分享給大家供大家參考,具體如下:
使用type動(dòng)態(tài)創(chuàng)建類(lèi)動(dòng)態(tài)語(yǔ)言和靜態(tài)語(yǔ)言最大的不同,就是函數(shù)和類(lèi)的定義,不是編譯時(shí)定義的,而是運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建的。
下面看一個(gè)例子:
# 定義一個(gè)Person類(lèi)class Person(object): def __init__(self): pass def say(self): print(’say hello’)p = Person()p.say()# 輸出 say helloprint(type(p)) # 輸出 <class ’__main__.Person’>print(type(Person)) # 輸出 <class ’type’>
運(yùn)行結(jié)果:
say hello<class ’__main__.Person’><class ’type’>
我們發(fā)現(xiàn),type(Person)輸出的是<class ’type’>是type類(lèi)型。
type()函數(shù)可以查看一個(gè)類(lèi)型或變量的類(lèi)型,Person是一個(gè)class(類(lèi)),它的類(lèi)型是type,而p是一個(gè) Person的實(shí)例,它的類(lèi)型是Person類(lèi)。
我們說(shuō)class(類(lèi))的定義是運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建的,而創(chuàng)建class(類(lèi))的方法就是使用type()函數(shù)。
eg:
# 定義一個(gè)方法def func(self, word=’hello’): print(’say %s’ % word)Person = type(’Person’, (object,), dict(say=func)) # 通過(guò)type創(chuàng)建Person類(lèi)p = Person()p.say() # 輸出 say helloprint(type(p)) # 輸出 <class ’__main__.Person’>print(type(Person)) # 輸出 <class ’type’>
運(yùn)行結(jié)果:
say hello<class ’__main__.Person’><class ’type’>
type函數(shù)動(dòng)態(tài)創(chuàng)建類(lèi),需要傳入3個(gè)參數(shù),分別是:
第一個(gè)參數(shù):class的名稱(chēng) 第二個(gè)參數(shù):繼承的父類(lèi)集合,注意Python支持多重繼承,如果只有一個(gè)父類(lèi),別忘了tuple的單元素寫(xiě)法(tuple單元素寫(xiě)法(obj,)); 第三個(gè)參數(shù):class的方法名稱(chēng)與函數(shù)綁定,這里我們把函數(shù)func綁定到方法名say上。通過(guò)type()函數(shù)創(chuàng)建的類(lèi)和直接寫(xiě)class是完全一樣的,因?yàn)镻ython解釋器遇到class定義時(shí),僅僅是掃描一下class定義的語(yǔ)法,然后調(diào)用type()函數(shù)創(chuàng)建出class。
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門(mén)與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章:
1. 基于javaweb+jsp實(shí)現(xiàn)學(xué)生宿舍管理系統(tǒng)2. idea設(shè)置代碼格式化的方法步驟3. 使用EF Code First搭建簡(jiǎn)易ASP.NET MVC網(wǎng)站并允許數(shù)據(jù)庫(kù)遷移4. 關(guān)聯(lián)數(shù)據(jù)入門(mén)——RDF應(yīng)用5. Python web如何在IIS發(fā)布應(yīng)用過(guò)程解析6. 一篇文章搞懂Python反斜杠的相關(guān)問(wèn)題7. PHP?redis?Sorted?Set實(shí)現(xiàn)字符串去重代碼示例8. 解決Python 進(jìn)程池Pool中一些坑9. Python scrapy爬取起點(diǎn)中文網(wǎng)小說(shuō)榜單10. XML、DataSet、DataGrid結(jié)合二
