在Python中,目录模块的__init__.py执行此操作不是一个好主意吗?

我有一个包含几个包含__init__.py文件的子目录的软件包。这些文件执行检查和初始化作业。


现在我在其中一些文件夹中还有一个文件,该文件不应该被一个直接引用,import因为它依赖于在其各自中执行的健全性检查__init__.py。让我们将这些称为“隐藏模块”-按照惯例,我使用下划线将其显而易见。


在我的内部__init__.py(_implementation.py位于同一文件夹中)执行以下操作不是一个好主意:


import os, sys

if sanity_check_successful:

    from ._implementation import *

    __all__ = sys.modules[__name__ + "._implementation"].__all__

这个想法应该很清楚,每当完整性检查失败时,我都会尝试在软件包的每个模块级别提供有意义的错误信息。


这是一个坏主意,即__all__从“隐藏模块”复制阵列吗?如果是这样,为什么而且还有更好的选择?


优点:是否有更简洁的方式编写这两行?


    from ._implementation import *

    __all__ = sys.modules[__name__ + "._implementation"].__all__

特别让我感到困扰的是,我必须"._implementation"在一个地方使用字符串,而在另一个地方使用模块名称。


小怪兽爱吃肉
浏览 215回答 2
2回答

慕尼黑的夜晚无繁华

有更简单的方法可以__all__从._implementation子模块进行设置。设置__all__否则很好:from ._implementation import *from ._implementation import __all__这只是简单地导入__all__并将其绑定到本地模块名称空间__all__。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python