Python-插件化開發


1、動態導入:

  運行時,根據用戶需求(提供字符串),找到模塊的資源動態加載起來。

2、內建函數__import__()

def __import__(name, globals=None, locals=None, fromlist=(), level=0):

   name:模塊名

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

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

    測試  直接調用:

   測試 可以動態交互加載模塊: 

1 if __name__ == '__main__':
2     name = input('>>>')
3     mod = __import__(name) # import tt
4     cls = getattr(mod, 'A')
5     cls().showme()

 

 2、importlib.import_module() 

1 import importlib
2 importlib.import_module(name, package=None)

 

   支持絕對導入 和 相對導入,如果是相對導入,package必須設置。

  測試:插件化編程的核心代碼。

 

  相對導入:

     

3、插件化編程技術:

  依賴的技術:

    反射:運行時獲取類型的信息,可以動態維護類型數據。

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

    多線程:可以開啟一個線程,等待用戶輸入,從而加載指定名稱的模塊。

  加載的時機:

    1、程序啟動時:

      像pycharm 這樣的工具,需要很多組建,這些組件也可能是插件,啟動的時候,掃描固定的目錄,加載插件

    2、程序運行中:

      程序運行過程中,接受用戶指令或請求,啟動相應的插件。

    兩種當時各有利弊,如果插件過多,或導致程序啟動很慢,如果用戶需要時加載,如果產檢太大或者依賴多,插件也會啟動慢

    所以先加載必須的,常用的插件,其他插件使用時,在動態載入。

 

4、應用:

  軟件的設計不可能完美,或者在某些功能上,不可能做的專業,需要專業的客戶增強。如PS

    

5、接口和插件的區別:

  接口往往是暴露出來的功能,例如模塊提供的函數或方法,加載模塊后嗲用這些函數完成功能,

  接口也是一種規范,它約定了必須是此案的功能(必須提供某名稱的函數), 但是不關心怎么實現這個功能。

  插件是把模塊加載到系統中,運行它,增強當前系統功能,或者提供系統不具備的功能,往往插件技術應用在框架設計中,系統本身設計簡單化,輕量級,實現基本功能后,其他功能通過插件加入進來,方便擴展。

 


免責聲明!

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



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