如何配置__init__.py实现Python子模块类与函数的直接调用?
问题:如何在Python子模块中直接暴露类和函数,无需嵌套调用
现有Python项目结构:
submodule __init__.py lib.py ClassDef.py main.py
希望通过以下语法导入lib.py中的函数与ClassDef.py中的类:
import submodule as s s.function_in_lib() tmp = s.ClassDef()
此前尝试在__init__.py中使用如下写法:
import submodule.ClassDef as l ClassDef = l.ClassDef
希望避免使用from submodule import ClassDef.ClassDef as ClassDef这类嵌套导入语法,请问类定义能否实现像函数那样的直接调用效果?
当然可以实现。只需在submodule/__init__.py中直接从对应模块导入需要暴露的类和函数,将它们提升到子模块的顶层命名空间即可。
具体实现步骤
- 修改
submodule/__init__.py内容:
# 从lib.py导入需要暴露的函数 from .lib import function_in_lib # 从ClassDef.py导入需要暴露的类 from .ClassDef import ClassDef
- 在
main.py中即可按期望方式调用:
import submodule as s s.function_in_lib() tmp = s.ClassDef()
补充说明
- 使用相对导入
from .lib import ...比绝对导入更灵活,子模块位置变动时无需修改导入路径。 - 这种写法完全规避了嵌套导入的问题,将类和函数直接挂载到
submodule命名空间下,调用体验和直接调用函数完全一致。
内容的提问来源于stack exchange,提问作者Gunslinger
相关产品推荐
相关产品推荐

