返回信息流因为需要的类和模块名只能在运行时知道,所以我通过这种方式去加载类:
```Python
target_class = getattr(importlib.import_module(module_name), class_name)
```
我的理解是每次运行到这里的时候python才回去源代码中把这个类加载进来。
然而实际情况是当我修改了源代码之后,用的还是老的类,这是为什么呢?
有没有办法每一次运行的时候再去从源代码中解析这个类出来?
这是一条镜像帖。来源:北邮人论坛 / python / #14712同步于 2016/6/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
小白求助,有关类动态加载的问题
ytinrete
2016/6/28镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
之前正好写过热加载,热重载python模块耶~
吭吭,入正题,要使用reload语句, import会先判断模块是否存在
# 不造md这个傲娇我驾驭得来嚒~
【 在 icybee 的大作中提到: 】
: 之前正好写过热加载,热重载python模块耶~
: 吭吭,入正题,要使用reload语句, import会先判断模块是否存在
: [md]
: ...................
我查了一下这个东西,好像需要保证这个模块必须已经加载才能用reload喔,那第一次怎么办呢?
还是需要用一个list去维护已经加载过的类么?有没有什么更方便的办法呢?
【 在 nuanyangyang 的大作中提到: 】
: 蓝后,又有了新的问题:正在执行的函数还在执行旧的版本,并没有自动切换到新版本。
搜了一下好像的确是有这种副作用,而且好像还有模块初始化代码又被跑一遍,以及模块命名空间的命名,
旧模块有新模块没有但还是能用。。。
信心已经被打成筛子了,呜喵QuQ。
java大法好。class loader专门解决这种问题。
【 在 ytinrete 的大作中提到: 】
:
: 我查了一下这个东西,好像需要保证这个模块必须已经加载才能用reload喔,那第一次怎么办呢?
: 还是需要用一个list去维护已经加载过的类么?有没有什么更方便的办法呢?
【 在 nuanyangyang 的大作中提到: 】
: java大法好。class loader专门解决这种问题。
诶话说回来class loader能重新再加载已经加载过的类么?
我记得class loader会先由父类去找吧,然后如果已经加载过找得到的就直接返回了 0.0