python - 動態加載模塊和類


1,使用系統函數import()
stringmodule = _
import
('string')

2,使用imp 模塊
import imp
stringmodule = imp.loadmodule('string',*imp.findmodule('string'))

3,使用exec
importstring = "import string as stringmodule"
exec import
string

import importlib

importlib是import的python實現

1、獲取模塊對象
m1 = importlib.importmodule("sites.sitespybuild")
print(m1)

輸出:

2、獲取類對象

aclass = getattr(m1, "sites_pybuild")

print(aclass)

輸出:

3、實例化對象

p = aclass("test")
相當於直接使用p = sites.sitespybuild.sitespybuild("test")

下面的文章也可以實現反射,主要思想是先導入module,然后使用globals()["classname"]獲得類定義,再使用此類定義來初始化對象。

http://blog.csdn.net/lokibalder/article/details/3459722

python是一個腳本語言,它不象java一樣有一個專門的包來處理反射。以 下是我們來看看python是怎么做到類似java一樣的反射功能的。我在網上搜了一下,因為在網上沒有很明確的文章說要怎么做,所以,我寫了這篇,希望 新手不要向我一樣走彎路,因為是新手,所以,我在這里沒能考慮到異常的處理。
-、動態加載類
說到動態的加載類,那就不得不說,動態的加態模塊。因為只能成功的加模了模塊才能加載到類。我們可以用,以下的代碼來動態的加載類
Python代碼
#modulePath是模塊文件的路徑+模塊的文件名。
aMod = sys.modules[modulePath]
當我們動態的加載了這個模塊后,我們就可以從這個模塊中取得你要的類了,感覺上這個方法有點像java中從類中反射出方法。下以的代碼可以
Python代碼
aClass= getattr(aMod, className)
二、動態實例化類
得到了class對象之后,在python就可以很方便的得到他的對像,以下這代碼
Python代碼 obj = new.instance(aClass)

三、得到對象、類或模塊中的所有屬性方法
在java的反射中我們可以得到對象中的所有屬性和方法,在python中,因為是腳本語言,所以我們要得到這個些屬性方法更加的方便,我們可以用以下的代碼獲得類,對象,模塊中的所有的屬性的名稱
Python代碼
dir(aClass)
我們得到這些屬性的名稱后,可以用上面得到class 的方法來獲得這個對象里的所有屬性
四、動態運行方法
動態的運行方法,我們也非常的方便,因為python是腳本語言,感覺起來很象javascript的方式來調用方法。
Python代碼
apply(objFunc,arrArgs)
代碼中objFunc是用getAttr從實例化后的對象中取得到function,而arrArgs是我們的參數,和javascript一樣,他是數組一樣的對象。
有了這些方法,我們就可以做和java反射一樣做的事了,我在網上找到了一個模塊,小改了一下,使得用這個模塊可以很方便的用類名實例化一個實例和運行這個實例中的方法,如果大家需要可以down下來看看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM