python 程式執行外掛程式 python外掛程式化開發

2021-10-11 09:58:18 字數 1863 閱讀 3391

動態匯入

執行時,根據使用者需求(提供字串),找到模組的資源動態載入起來。

1內建函式__import__()

__import__(name,globals = none,locals = none,fromlist = (),level = 0)

name,模組名

import語句本質上就是呼叫這個函式,但是不鼓勵直接使用它,建議使用importlib.import_module()。

sys = __import__("sys")等價於import sys

#test1.py

classa:defshowme(self):print("i am a")#test2.py

if __name__ =="__main__":

mod= __import__("test1")

cls= getattr(mod,"a")

cls().showme()

結果為:

i am a

也可以定義乙個函式,動態的載入。

上面的showme不要,不然呼叫了。

importlib.import_module()

importlib.import_module(name,package = none)

支援絕對匯入和相對匯入,如果是相對匯入,package必須設定。

#test1.py

classa:defshowme(self):print("i am a")#test2.py

importimportlibdef plugin_load(pluign_name:str,sep=":"):

m,_,c=pluign_name.partition(sep)

mod=importlib.import_module(m)

cls=getattr(mod,c)returncls()if __name__ =="__main__":#安裝外掛程式

a = plugin_load("test1:a")

a.showme()

結果為:

i am a

上面的例子就是外掛程式化程式設計的核心**

外掛程式化程式設計技術

依賴的技術

反射:執行時獲取型別的資訊,可以動態維護型別新資料。

動態import:推薦使用importlib模組,實現動態import模組的能力。

多執行緒:可以開啟乙個執行緒,等待使用者輸入,從而載入指定名稱的模組。

載入的時機

什麼時候載入合適?

程式啟動的時候,這是程式執行中?

程式啟動時,像pycharm這樣的工具,需要很多元件,這些元件也可能是外掛程式,啟動的時候掃瞄固定的目錄,載入外掛程式。

程式執行中,程式執行過程中,接受使用者指令或請求,啟動相應的外掛程式。

兩種方式各有利弊,如果外掛程式過多,對導致程式啟動很慢,如果使用者需要時再載入,如果外掛程式太大或者依賴多,外掛程式也會啟動慢。

所以先載入必須的,常用的外掛程式,其他外掛程式使用時,發現需要,動態載入。

應用軟體的設計不可能盡善盡美,或者在某些功能上,不可能做的專業,需要專業的客戶自己增強,比如photoshop的濾鏡外掛程式。

notepad++,它只需要做好乙個文字編輯器就可以了,其他增強功能都通過外掛程式的方式提供。拼寫檢查,html預覽、正則外掛程式等。

要定義規範,定義外掛程式從**來,如何載入,必須實現的功能等。

介面和外掛程式的區別?

介面往往是暴露出來的功能,例如模組提供的函式或方法,載入模組後呼叫這些函式完成功能。介面也是一種規範,它約定了必須實現的功能(必須提供某名稱的函式),但是不關心怎麼實現這個功能。

外掛程式是吧模組載入到系統中,執行它,增強當前系統功能,或者提供系統不具備的功能,往往外掛程式技術應用在框架設計中,系統本身設計簡單化,輕量級,實現基本功能後,其他功能通過外掛程式加入進來,方便擴充套件。

執行python程式

1 在windows下執行python程式 1 從dos命令列執行python指令碼 用python直譯器來執行python指令碼,在windows下面python直譯器是python.exe,我的python檔案安裝在d python27,在這個目錄下可以看到python直譯器。完整的命令應該是 ...

執行python程式

1 在windows下執行python程式 1 從dos命令列執行python指令碼 用python直譯器來執行python指令碼,在windows下面python直譯器是python.exe,我的python檔案安裝在d python27,在這個目錄下可以看到python直譯器。完整的命令應該是 ...

python源程式執行 Python程式執行機制

對於pyhton語言的執行過程,筆者整理了以下流程圖 關於以上流程圖的說明 1.執行a.py檔案時,首先會檢查a.py檔案內是否匯入了其他檔案 如import b 2.若沒有匯入其他檔案,則會將原始碼a.py編譯成中間結果的位元組碼 即pycodeobject,它是放在記憶體中的,並沒有做持久化操作...