Python module的重新加载
pyDev的console很好用,可以实时调试写的Python代码。但有个问题,发现代码问题,修改后无法重新加载。笨的方法就是关掉pyDevconsole,再重新打开。还好Python提供了reload函数,可以用来加载module。下面是自己写的2个简单的重新加载方法,通过类名(或对象)加载其所在的module,或通过module名加载:
def reload_by_class(clazz): try: module_name = clazz.__module__ reload_by_module_name(module_name) except AttributeError: print('parameter must be class or object')def reload_by_module_name(module_name): try: module = sys.modules[module_name] reload(module) __import__(module_name) except KeyError: print('the module is not imported') except: print('reload failure')
?这里要注意,重新加载后:
(1)需要重新import,才会使用新加载的module,否则依然使用原先的module。
(2)对新生成的对象有效,重新加载之前的对象保持不变。
下面是一个使用的例子:
(1)n刚开始del_note()输出的提示没有感叹号
(2)修改代码,提示信息加上感叹号
(3)再执行del_note(),输出的提示还是没有感叹号
(4)reload_by_class()重新加载module
(5)新建n2对象,执行del_note(),输出的提示还是没有感叹号
(6)重新import
(7)新建n3对象,执行del_note(),输出的提示有感叹号了