python – 動態載入模組和類

來源:互聯網
上載者:User

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下來看看

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.