如何导入含连字符子目录下的Python类(脚本与目录均含连字符)
问题定位
- 第一个错误:
importlib.import_module()方法仅支持导入模块对象,不支持直接导入模块内部的类/函数。你把类名check也写到了导入路径里,解释器会把check识别为new_script模块下的子模块,自然会抛出new_script不是包的错误。 - 第二个错误:就算模块导入正确,你直接调用
check()也无法找到类,因为导入的模块对象默认不会把内部属性挂载到当前命名空间,需要显式从模块对象中提取check类。 - 额外注意:你定义的
print_me方法没有加self参数,作为实例方法调用时会触发参数不匹配错误,建议补充self或者标记为静态方法。
正确实现代码
import importlib # 仅导入到new_script模块层级 mod = importlib.import_module("level-1.level-2.new_script") # 从模块中提取check类 check = mod.check my_instance = check() # 注意原方法要加self参数才能正常调用,修改后的new_script.py代码参考: # class check: # def print_me(self): # print("inside the class") my_instance.print_me()
内容的提问来源于stack exchange,提问作者Danish Xavier
相关产品推荐
相关产品推荐

