Python module的从新加载

Python module的重新加载

pyDevconsole很好用,可以实时调试写的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)对新生成的对象有效,重新加载之前的对象保持不变。

下面是一个使用的例子:

Python module的从新加载
1n刚开始del_note()输出的提示没有感叹号

2)修改代码,提示信息加上感叹号

3)再执行del_note(),输出的提示还是没有感叹号

4reload_by_class()重新加载module

5)新建n2对象,执行del_note(),输出的提示还是没有感叹号

6)重新import

7)新建n3对象,执行del_note(),输出的提示有感叹号了