🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 概述 如果重载模块A,A导入了模块B和C,重载A并不会重载B和C,也就是说重载不是递归进行的。 ### 通用性的递归模块重载工具 reload_all函数会重载模块和该模块导入的每个模块。 ```python #!/usr/bin/env python # coding: utf-8 """ reloadall.py: transitively realod nested modules """ import types from imp import reload debug = False def status(module): """测试时,显示状态;生产环境默认关闭""" if debug: print('realoding ' + module.__name__) def transitive_reload(module, visited): if module not in visited: status(module) reload(module) visited[module] = None # 递归查找模块中的模块 for attrobj in [new_module for new_module in module.__dict__.itervalues() if isinstance(new_module, types.ModuleType)]: transitive_reload(attrobj, visited) def reload_all(*args): """判断一下,如果是模块则进行重载""" visited = {} for arg in [new_arg for new_arg in args if isinstance(new_arg, types.ModuleType)]: transitive_reload(arg, visited) if __name__ == '__main__': debug = True import reloadall reload_all(reloadall) ```