python机制_python 加载模块机制
1,使用系統(tǒng)函數(shù)import()
stringmodule = _import('string')
2,使用imp 模塊
import imp
stringmodule = imp.loadmodule('string',*imp.findmodule('string'))
3,使用exec
importstring = "import string as stringmodule"
exec importstring
import importlib
importlib是import的python實(shí)現(xiàn)
1、獲取模塊對(duì)象
m1 = importlib.importmodule("sites.sitespybuild")
print(m1)
輸出:
2、獲取類對(duì)象
aclass = getattr(m1, "sites_pybuild")
print(aclass)
輸出:
3、實(shí)例化對(duì)象
p = aclass("test")
相當(dāng)于直接使用p = sites.sitespybuild.sitespybuild("test")
下面的文章也可以實(shí)現(xiàn)反射,主要思想是先導(dǎo)入module,然后使用globals()["classname"]獲得類定義,再使用此類定義來(lái)初始化對(duì)象。
http://blog.csdn.net/lokibalder/article/details/3459722
python
是一個(gè)腳本語(yǔ)言,它不象java一樣有一個(gè)專門的包來(lái)處理反射。以
下是我們來(lái)看看python是怎么做到類似java一樣的反射功能的。我在網(wǎng)上搜了一下,因?yàn)樵诰W(wǎng)上沒(méi)有很明確的文章說(shuō)要怎么做,所以,我寫了這篇,希望
新手不要向我一樣走彎路,因?yàn)槭切率?#xff0c;所以,我在這里沒(méi)能考慮到異常的處理。
-、動(dòng)態(tài)加載類
說(shuō)到動(dòng)態(tài)的加載類,那就不得不說(shuō),動(dòng)態(tài)的加態(tài)模塊。因?yàn)橹荒艹晒Φ募幽A四K才能加載到類。我們可以用,以下的代碼來(lái)動(dòng)態(tài)的加載類
Python代碼
#modulePath是模塊文件的路徑+模塊的文件名。
aMod = sys.modules[modulePath]
當(dāng)我們動(dòng)態(tài)的加載了這個(gè)模塊后,我們就可以從這個(gè)模塊中取得你要的類了,感覺(jué)上這個(gè)方法有點(diǎn)像java中從類中反射出方法。下以的代碼可以
Python代碼
aClass= getattr(aMod, className)
二、動(dòng)態(tài)實(shí)例化類
得到了class對(duì)象之后,在python就可以很方便的得到他的對(duì)像,以下這代碼
Python代碼 obj = new.instance(aClass)
三、得到對(duì)象、類或模塊中的所有屬性方法
在java的反射中我們可以得到對(duì)象中的所有屬性和方法,在python中,因?yàn)槭悄_本語(yǔ)言,所以我們要得到這個(gè)些屬性方法更加的方便,我們可以用以下的代碼獲得類,對(duì)象,模塊中的所有的屬性的名稱
Python代碼
dir(aClass)
我們得到這些屬性的名稱后,可以用上面得到class 的方法來(lái)獲得這個(gè)對(duì)象里的所有屬性
四、動(dòng)態(tài)運(yùn)行方法
動(dòng)態(tài)的運(yùn)行方法,我們也非常的方便,因?yàn)閜ython是腳本語(yǔ)言,感覺(jué)起來(lái)很象javascript的方式來(lái)調(diào)用方法。
Python代碼
apply(objFunc,arrArgs)
代碼中objFunc是用getAttr從實(shí)例化后的對(duì)象中取得到function,而arrArgs是我們的參數(shù),和javascript一樣,他是數(shù)組一樣的對(duì)象。
有了這些方法,我們就可以做和java反射一樣做的事了,我在網(wǎng)上找到了一個(gè)模塊,小改了一下,使得用這個(gè)模塊可以很方便的用類名實(shí)例化一個(gè)實(shí)例和運(yùn)行這個(gè)實(shí)例中的方法,如果大家需要可以down下來(lái)看看
總結(jié)
以上是生活随笔為你收集整理的python机制_python 加载模块机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 100%中国自主!开源软件五巨头全部支持
- 下一篇: 手机微距摄影,春天拍摄花朵的细节之美