0
package_path = '/home/foo/bar/'
module_class = 'hello.World'
method = 'something'

首先,我想导入hello 模块package_path/home/foo/bar/)里面的内容

World然后,我必须在这个模块上实例化这个类

最后我应该something()在新的world_instance_object上运行该方法

有什么想法吗?

太感谢了!

4

1 回答 1

1

为了避免不得不操作sys.path并防止您导入的所有额外模块混乱sys.modules,我建议使用execfile()它。像这样的东西(未经测试的代码):

import os.path

def load_and_call(package_path, module_class, method_name):
    module_name, class_name = module_class.split(".")
    module_globals = {}
    execfile(os.path.join(package_path, module_name + ".py"), module_globals)
    return getattr(module_globals[class_name](), method_name, lambda: None)()

如果一个文件将被多次使用(同样,未经测试),您可以添加一些代码来使用字典缓存已解析的对象:

def load_and_call(package_path, module_class, method_name, _module_cache={}):
    module_name, class_name = module_class.split(".")
    py_path = os.path.join(package_path, module_name + ".py")
    module_globals = _module_cache.setdefault(py_path, {})
    if not module_globals:
        execfile(py_path, module_globals)
    return getattr(module_globals[class_name](), method_name, lambda: None)()
于 2013-09-20T22:58:52.993 回答