Python "私有"函数编码约定

109 投票
1 回答
82993 浏览
提问于 2025-04-17 16:54

在写Python模块和里面的函数时,我有一些“公共”函数是给外部使用的,但还有一些“私有”函数只想让内部使用,不想让外面的人看到。

我知道在Python中没有绝对的私有函数。那么,区分“公共”函数和“私有”函数的最佳、最整洁或最常用的方式是什么呢?

我列出了一些我知道的方式:

  1. 在模块文件中使用 __all__ 来标明哪些是“公共”函数(什么是Python中的__all__模块级变量?
  2. 在“私有”函数的名字前加下划线

还有其他人使用的想法或约定吗?

非常感谢!

1 个回答

142

来自Python的模块文档:

在Python中,没有真正的“私有”实例变量,也就是说,除了在对象内部,外部无法访问这些变量。不过,大多数Python代码遵循一个约定:如果一个名字前面有个下划线(比如 _spam),那么它应该被视为不公开的部分(无论是函数、方法还是数据成员)。这意味着它是实现细节,可能会随时改变。

因为有合理的需求需要类内部的私有成员(比如避免与子类中定义的名字冲突),所以Python提供了一种有限的支持机制,叫做名字改编。任何形式为 __spam 的标识符(至少两个前导下划线,最多一个后导下划线)会被文本上替换成 _classname__spam,其中 classname 是当前类的名字,前面的下划线会被去掉。这种改编不考虑标识符的语法位置,只要它在类的定义中就会发生。

撰写回答