90

在编写 python 模块和其中的函数时,我有一些应该公开给外部人员的“公共”函数,但还有一些只应该在本地和内部看到和使用的其他“私有”函数。

我知道在 python 中没有绝对的私有函数。但是,区分“公共”功能和“私人”功能的最佳、最简洁或最常用的风格是什么?

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

  1. 在模块文件中使用__all__以指示其“公共”功能(python __all__ 模块级变量是什么?
  2. 在“私有”函数名称的开头使用下划线

人们使用其他任何想法或惯例吗?

非常感谢!

4

1 回答 1

121

来自 Python 的Class模块文档:

在 Python 中不存在只能从对象内部访问的“私有”实例变量。但是,大多数 Python 代码都遵循一个约定:前缀为下划线的名称(例如 _spam)应被视为 API 的非公共部分(无论是函数、方法还是数据成员) . 它应被视为实施细节,如有更改,恕不另行通知。

由于类私有成员有一个有效的用例(即避免名称与子类定义的名称发生名称冲突),因此对这种称为名称修饰的机制的支持有限。__spam 形式的任何标识符(至少两个前导下划线,最多一个尾随下划线)在文本上替换为 _classname__spam,其中 classname 是去掉前导下划线的当前类名。只要它出现在类的定义中,就无需考虑标识符的句法位置,就可以完成这种修饰。

于 2013-02-25T17:03:22.417 回答