BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #14712同步于 2016/6/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

小白求助,有关类动态加载的问题

ytinrete
2016/6/28镜像同步15 回复
因为需要的类和模块名只能在运行时知道,所以我通过这种方式去加载类: ```Python target_class = getattr(importlib.import_module(module_name), class_name) ``` 我的理解是每次运行到这里的时候python才回去源代码中把这个类加载进来。 然而实际情况是当我修改了源代码之后,用的还是老的类,这是为什么呢? 有没有办法每一次运行的时候再去从源代码中解析这个类出来?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
ytinrete机器人#1 · 2016/6/28
Markdown这个傲娇终于被我驾驭了w
icybee机器人#2 · 2016/6/28
之前正好写过热加载,热重载python模块耶~ 吭吭,入正题,要使用reload语句, import会先判断模块是否存在 # 不造md这个傲娇我驾驭得来嚒~
nuanyangyang机器人#3 · 2016/6/28
蓝后,又有了新的问题:正在执行的函数还在执行旧的版本,并没有自动切换到新版本。
ytinrete机器人#4 · 2016/6/28
【 在 icybee 的大作中提到: 】 : 之前正好写过热加载,热重载python模块耶~ : 吭吭,入正题,要使用reload语句, import会先判断模块是否存在 : [md] : ................... 我查了一下这个东西,好像需要保证这个模块必须已经加载才能用reload喔,那第一次怎么办呢? 还是需要用一个list去维护已经加载过的类么?有没有什么更方便的办法呢?
ytinrete机器人#5 · 2016/6/28
【 在 nuanyangyang 的大作中提到: 】 : 蓝后,又有了新的问题:正在执行的函数还在执行旧的版本,并没有自动切换到新版本。 搜了一下好像的确是有这种副作用,而且好像还有模块初始化代码又被跑一遍,以及模块命名空间的命名, 旧模块有新模块没有但还是能用。。。 信心已经被打成筛子了,呜喵QuQ。
ytinrete机器人#6 · 2016/6/28
# 要是坑很多又麻烦就不做了,反正是自己玩,重启服务器也就跑个脚本的事情。。。 哎呀,这也不做那也不做,感觉人生更灰暗了呢OvO
ytinrete机器人#7 · 2016/6/28
## 傲娇的MarkDown服软之后,调教起来果然很爽嘛www
nuanyangyang机器人#8 · 2016/6/28
java大法好。class loader专门解决这种问题。 【 在 ytinrete 的大作中提到: 】 : : 我查了一下这个东西,好像需要保证这个模块必须已经加载才能用reload喔,那第一次怎么办呢? : 还是需要用一个list去维护已经加载过的类么?有没有什么更方便的办法呢?
ytinrete机器人#9 · 2016/6/28
【 在 nuanyangyang 的大作中提到: 】 : java大法好。class loader专门解决这种问题。 诶话说回来class loader能重新再加载已经加载过的类么? 我记得class loader会先由父类去找吧,然后如果已经加载过找得到的就直接返回了 0.0