Python-插件化開發

一、動態導入:編程

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

二、內建函數__import__()框架

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

   name:模塊名函數

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

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

    測試  直接調用:spa

   測試 能夠動態交互加載模塊: 插件

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

 

 二、importlib.import_module() 線程

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

 

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

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

 

  相對導入:

     

三、插件化編程技術:

  依賴的技術:

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

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

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

  加載的時機:

    一、程序啓動時:

      像pycharm 這樣的工具,須要不少組建,這些組件也多是插件,啓動的時候,掃描固定的目錄,加載插件

    二、程序運行中:

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

    兩種當時各有利弊,若是插件過多,或致使程序啓動很慢,若是用戶須要時加載,若是產檢太大或者依賴多,插件也會啓動慢

    因此先加載必須的,經常使用的插件,其餘插件使用時,在動態載入。

 

四、應用:

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

    

五、接口和插件的區別:

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

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

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

相關文章
相關標籤/搜索