Exemple #1
0
    def _import_and_init_class(self, module_name, class_name, extend_path, init_para, as_name=''):
        """
        装载并初始化对象返回(如果对象已存在则直接返回)

        @param {string} module_name - 模块名
        @param {string} class_name - 处理类名
        @param {string} extend_path - 模块所在搜索路径
        @param {string} init_para - 初始化的json字符串
        @param {string} as_name - 对象别名,可以设置不一样的值让类可以多次实例化

        @return {object} - 初始化后的模块对象

        @throws {ImportError} - 初始化失败返回该异常
        """
        # 检查对象是否已存在
        _key = as_name
        _class_tag = '%s.%s' % (module_name, class_name)
        if as_name == '':
            _key = _class_tag

        if self._import_object_dict is None:
            self._import_object_dict = dict()
        if _key in self._import_object_dict.keys():
            # 已存在,直接返回即可
            return self._import_object_dict[_key]

        # 装载模块
        _class = None
        if ImportTool.check_module_imported(module_name):
            # 模块已存在
            _class = ImportTool.get_member_from_module(
                ImportTool.get_imported_module(module_name),
                class_name
            )
        else:
            # 动态装载模块
            _class = ImportTool.get_member_from_module(
                ImportTool.import_module(
                    module_name,
                    extend_path=extend_path
                ),
                class_name
            )

        if _class is None:
            raise ImportError(_("config file error: can't import module: $1!", (_class_tag, )))

        # 初始化对象并返回
        _init_para = dict()
        if init_para != '':
            _init_para = StringTool.json_to_object(init_para)
        self._import_object_dict[_key] = _class(**_init_para)
        return self._import_object_dict[_key]
import sys
import os
sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/' + '../../..'))
from HiveNetLib.base_tools.import_tool import ImportTool

__MOUDLE__ = 'import_tool_demo'  # 模块名
__DESCRIPT__ = u'动态模块加载示例'  # 模块描述
__VERSION__ = '0.1.0'  # 版本
__AUTHOR__ = u'黎慧剑'  # 作者
__PUBLISH__ = '2018.10.02'  # 发布日期

if __name__ == '__main__':
    # 示例1,导入公共库
    print('datetime库导入状态:%s' %
          (str(ImportTool.check_module_imported('datetime'))))
    _datetime = ImportTool.import_module('datetime')  # 导入公共库
    # 执行公共库
    print('当前时间为:%s' % (str(_datetime.datetime.now())))
    print('datetime库导入状态:%s' %
          (str(ImportTool.check_module_imported('datetime'))))

    # 示例2,导入模块
    _generic = ImportTool.import_module('HiveNetLib.generic')
    # 使用模块的对象
    _result = _generic.CResult('00000')
    print('\nCResult: %s' % (str(_result)))

    # 示例3,导入具体对象,并访问该成员属性,或类
    _CResult = ImportTool.import_module('HiveNetLib.generic',
                                        import_member='CResult')