Blender Python开发中导入模块全部类同时强制重载模块的问题
错误原因
from .MyPlugin import *语法只会将MyPlugin模块下的成员(类、函数、变量等)导入当前文件的命名空间,不会将MyPlugin模块本身作为变量引入,因此调用reload(MyPlugin)时会触发MyPlugin is not defined报错reload()方法仅支持接收模块对象作为入参,无法直接重载单个类对象,因此单独重载类的方案不可行
修复方案
调整导入和重载的执行顺序:先导入模块本身到当前命名空间,完成模块重载更新缓存后,再导入模块内的类成员,确保拿到的是最新的类定义。
修复后的代码如下:
from importlib import reload # 先导入模块本身 from . import MyPlugin # 重载模块清空缓存 reload(MyPlugin) # 从重载后的模块内导入所有类 from .MyPlugin import * classes = [ClassA, ClassB, ClassC] # 此处省略每个类的注册逻辑
如果你的MyPlugin模块下还嵌套了其他子模块需要同步重载,可以在MyPlugin目录的__init__.py中按照相同逻辑处理子模块的重载即可。
内容的提问来源于stack exchange,提问作者max pleaner
相关产品推荐
相关产品推荐

