在Python中实例化嵌套的Cmd Interpreter

时间:2016-10-19 11:46:20

标签: python python-cmd

您好我希望使用Cmd模块在Python中创建嵌套解释器。

我设置了动态模块加载,因为我希望我的项目可以轻松扩展(即将新的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类。这样做的问题是,这样我只能在这个方法中创建类,我不能添加一个新的控制台模块文件,我可以动态加载,而不需要在这个方法中定义。

这有什么解决方法吗?

1 个答案:

答案 0 :(得分:0)

当您说“将MainConsole作为第二个变量传递”时,您似乎意味着“将新的SubConsole作为MainConsole的子类”。您正在有效地定义一个以基类作为参数的类工厂。

您说“在此方法中创建类”,但在函数中显示instantiateConsole。注意术语是很重要的。

这些与动态导入(包含)您可能希望用作instantiateClass的参数的其他基类的模块无关。在最简单的情况下,您可以添加一个标准目录,这些模块将存放到您的sys.path,按名称导入模块,然后提取基类(为简单起见,我假设将始终定义为{ {1}})。然后,您将运行

等代码
BaseConsole

如果基类的名称可能不同(您将如何确定其名称?),您可能必须优先使用extension_module = importlib.import_module("my_extension") new_console = instantiateConsole(extension_module.BaseConsole) 来访问动态导入的扩展模块的简单属性。