您可以做到这一点,但这并不是一个好主意,您正在与python模块/软件包应该工作的方式作斗争。通过在其中导入适当的名称,__init__.py
可以使它们在包名称空间中可访问。通过删除模块名称,可以使它们不可访问。(有关为什么需要删除它们的信息,请参阅此问题)。这样一来,您可以通过以下方式接近所需的内容__init__.py
:
from another_class import doit
from another_class import dataholder
from descriptive_name import getSomeStuff
from descriptive_name import hold_more_data
del another_class, descriptive_name
__all__ = ['doit', 'dataholder', 'getSomeStuff', 'hold_more_data']
但是,这将中断随后的尝试import package.another_class
。通常,您不能从中导入任何内容,package.module
而不package.module
能将其作为对该模块的可导入引用进行访问(尽管__all__
您可以使用阻塞from package import module
)。
更一般而言,通过按类/函数划分代码,您正在使用Python包/模块系统。python模块通常应包含要作为一个单元导入的内容。为了方便起见,直接在顶级包名称空间中导入子模块组件并不少见,但是相反的做法是试图隐藏子模块并仅 允许通过顶级包名称空间访问其内容,这将导致- 问题。另外,尝试“清理”模块的程序包名称空间没有任何好处。这些模块应该位于程序包名称空间中。那就是他们的归属。