我有一个包mypack
,里面有模块mod_a
和mod_b
。我希望包本身和mod_a
可以自由导入:
import mypack
import mypack.mod_a
但是,我想保留mod_b
作为mypack
的专用。这是因为它的存在仅仅是为了组织后者的内部代码。
我的第一个问题是,在Python编程中,拥有这样的“私有”模块是一种公认的做法吗?
如果是,我的第二个问题是,向客户传达这一意图的最佳方式是什么?我是否在名称前加下划线(即_mod_b
)?或者声明一个子包private
并将所有这些模块放在那里是一个好主意吗?
Tags:
我已经确定的解决方案是创建一个“私有”子包,并将我希望隐藏的所有模块放在其中。这样它们就可以被隐藏起来,使得
mypack
的模块列表更干净、更容易解析。对我来说,这也不算不合理。
我在私有模块前面加上下划线,以便向用户传达意图。在您的情况下,这将是
mypack._mod_b
这与PEP8建议在由Python模块包装时用前导下划线命名C扩展模块(即
_socket
和socket
)的精神相同(但并不完全类似)。虽然没有显式的私有关键字,但是有一个约定是将私有函数以一个下划线开头,但是一个双前导下划线将使其成为这样,其他人就不能从模块外部轻松调用该函数。请参阅PEP 8中的以下内容
要使整个模块成为私有模块,请不要包含它
__init__.py
文件。相关问题 更多 >
编程相关推荐