【发布时间】:2020-02-04 12:46:47
【问题描述】:
我正在创建一个 python 包,将由大约 1 个小型最终用户组使用。 20人。一个更小的 3 人开发团队将为该软件包做出贡献。
我的包包含多个子包。我不希望最终用户访问子包中的任何实用程序功能。如何命名这些子包中的子包和模块?
- 子包中的模块名称以下划线开头?例如_mymodule.py
- 子包名称以下划线开头?例如_mypackage
- 两者都有?
我的目的是与最终用户沟通,这些子包不是为他们设计的。但是,这些函数可能需要作为其他子包中的实用函数,因此并不是真正的“私有”。
【问题讨论】:
-
我不完全相信这是必要的。仅仅将内容隐藏在子包中通常就足以让普通用户隐藏它。
-
????同意。在顶层模块中提供用户应该与之交互的功能,并对其进行广泛的记录,以便清楚用户应该如何使用该模块。任何未记录且不明显直接有用的内容通常被理解为内部实现细节。
-
如果用户想要使用未记录的功能,他们无论如何都可以这样做,因为 python 的动态特性。没有真正私有的“事物”,所以只需使用常用的方式(pep8) - 用一个下划线命名以表示该事物不是公共的。如果您想将事物标记为受保护,则示例中的两个选项都可以接受
-
感谢您的回答。但是,由于方法繁多,将所有内容都放在顶层模块中是不切实际的。我同意您对功能有限的小型软件包的建议。
-
经过进一步研究,我从 pandas github 存储库中获得了灵感。 (例如 io 子包)该方法难以概括,并且看起来像是个案决定。但结果感觉不错:github.com/pandas-dev/pandas/tree/master/pandas/io
标签: python coding-style pep8