2016-10-19 20 views
0

嗨我正在尋找使用Cmd模塊在Python中創建嵌套解釋器。在Python中實例化嵌套的Cmd解釋器

我設置了一個動態模塊加載,因爲我希望我的項目很容易擴展(即將一個新的python文件添加到文件夾中,而不必更改主代碼能夠加載它)。

我嵌套的解釋是目前的設置是這樣的:

def instantiateConsole(base): 

    class SubConsole(cmd.Cmd, base): 
     def __init__(self): 
      cmd.Cmd.__init__(self) 

     def do_action(self,args): 
      print "Action" 
    return SubConsole 

這是必要的,因爲爲了創建一個嵌套的解釋我必須通過MainConsole作爲第二個變量的SubConsole類。這樣做的問題是,這種方式我只能在這個方法內創建類,並且我不能添加一個新的控制檯模塊文件,我可以動態加載而無需在此方法中定義。

有沒有解決這個問題的方法?

+0

你可以給一個傳遞'MainConsole'的例子嗎? –

回答

0

當您說「將MainConsole作爲第二個變量傳遞」時,您的意思是「使新的SubConsole成爲MainConsole的子類」。您正在有效地定義一個將基類作爲參數的類工廠。

你說「在這個方法裏面創建類」,但是在函數中出現instantiateConsole。小心術語是很重要的。

這與動態導入(包含其他基類的模塊)無關,您可能希望將其作爲參數用於instantiateClass。在最簡單的情況下,您可以添加一個標準目錄,這些模塊將存放在您的sys.path中,通過名稱導入模塊,然後提取基類(我爲簡單起見將假定總是將其定義爲BaseConsole)。然後,您可以運行代碼,如

extension_module = importlib.import_module("my_extension") 
new_console = instantiateConsole(extension_module.BaseConsole) 

如果基類的名稱可能有所不同(你將如何確定它的名字嗎?),你可能會優先使用getattr()簡單的屬性訪問動態輸入擴展模塊。

相關問題