You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化Python模块中类的直接导入操作?

优化Python模块类的导入方式

我正在编写一个Python模块,其结构如下(大小写格式固定,无法修改):

top_level_module/
    __init__.py
    sub_module1/
        __init__.py
        Class1.py
        Class2.py
    sub_module2/
        __init__.py
        Class3.py

目前导入类需要写from top_level_module.sub_module1.Class1 import Class1这类冗长语句,我想简化导入方式。之前试过在子模块里创建classes.py统一导入类,用from top_level_module.sub_module1.classes import Class1, Class2来导入,但感觉不够合理。我更希望通过__init__.py来实现简化导入,同时不阻塞ClassX.py这类模块本身的导入能力——也就是既可以直接导入类,也能单独导入ClassX模块。


利用__init__.py实现简化导入

1. 子模块级别的简化(以sub_module1为例)

修改sub_module1/__init__.py,将各个类导入到子模块的命名空间中:

# sub_module1/__init__.py
from .Class1 import Class1
from .Class2 import Class2

这样你就可以直接从子模块导入类:

from top_level_module.sub_module1 import Class1, Class2

同时,原有的模块导入方式依然有效,比如:

import top_level_module.sub_module1.Class1
# 或者
from top_level_module.sub_module1 import Class1 as Class1Module

2. 顶层模块级别的简化(可选)

如果希望直接从顶层模块导入所有类,可以修改top_level_module/__init__.py:

# top_level_module/__init__.py
from .sub_module1 import Class1, Class2
from .sub_module2 import Class3

这样就能直接从顶层模块导入类:

from top_level_module import Class1, Class2, Class3

同样,原有的模块导入路径完全不受影响,你仍然可以按需导入Class1.py这类模块文件。

方案优势

Python的__init__.py核心作用就是定义包的公共接口,将类导入到包的命名空间中,只是让类的访问路径更简洁,并不会屏蔽原模块的导入。这种方式既满足了简化导入的需求,也保留了原模块结构的灵活性,完全符合你的要求。

内容的提问来源于stack exchange,提问作者Tristan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 23:47:09